HTTP 프로토콜이란?
HTTP(Hypertext Transfer Protocol)은 인터넷상에서 데이터를 주고받기 위해 사용되는 프로토콜이다. 주로 클라이언트와 웹 서버 간에 데이터를 주고받는 데 사용되며, 어플리케이션 레벨의 프로토콜로 TCP/IP위에서 작동한다.
HTTP는 간단한 요청과 응답 메시지를 이용하여 동작한다. 클라이언트가 웹 페이지에 접속하거나 파일을 요청할 때, 클라이언트가 HTTP 요청 메시지를 생성하고, 웹 서버는 해당 요청을 받아 HTTP 응답 메시지를 생성하여 클라이언트에게 보낸다.
HTTP의 요청/응답 모델
클라이언트와 서버 간에 데이터를 주고받는 방식을 묘사하는 것으로, 클라이언트가 서버에게 요청을 보내면, 서버는 그에 대한 응답을 다시 클라이언트에게 전송하는 구조이다. 이 모델은 월드 와이드 웹(World Wide Web)에서 주로 사용되는 방식으로서, HTTP 프로토콜의 기본 동작 방식을 설명한다.
1. 클라이언트가 서버에게 요청
클라이언트가 웹 서버에서 웹 페이지, 이미지, 동영상 등을 요청하는 HTTP 요청 메시지 생성
요청 메시지에는 요청 방식(GET, POST, PUT, DELETE 등), 요청된 리소스의 URL, 요청 헤더 등이 포함함
2. 서버가 클라이언트에게 응답
서버는 클라이언트의 요청을 받아 해당 리소스를 찾거나 요청에 대한 처리를 수행한 후, HTTP 응답 메시지를 생성
응답 메시지에는 응답 상태 코드(200 OK, 404 Not Found 등), 응답 헤더, 요청한 리소스의 데이터 등이 포함함
3. 클라이언트가 응답을 처리
클라이언트는 서버로부터 받은 응답 메시지를 처리함
웹 브라우저에서는 HTML, 이미지, 스타일 시트, 자바스크립트 등의 데이터를 해석하고 렌더링 하여 사용자에게 보여줌
HTTP method 중 GET과 POST의 차이점
공통점: 브라우저가 서버에 요청하는 것
GET method
서버로부터 정보를 요청할 때 사용됨
주로 웹 페이지의 조회나 검색 결과를 요청하는 데 사용됨
요청 파라미터는 URL의 쿼리 문자열에 포함되어 전송됨
URL에 파라미터가 노출되기 때문에 보안에 취약할 수 있음
캐시(cache)에 의해 GET 요청이 재사용될 수 있음
브라우저 히스토리에 저장되며, 뒤로 가기, 앞으로 가기 등 브라우저 동작에 영향을 받을 수 있음(캐시 영향)
POST method
데이터를 제출하거나 새로운 리소스를 생성하는데 사용됨
주로 웹 폼(form)을 통해 데이터를 전송하거나, 파일 업로드 등에 사용됨
요청 파라미터는 요청 메시지의 본문(body)에 담겨서 전송됨
URL에 파라미터가 노출되지 않기 때문에 GET에 비해 보안적으로 더 안전함
캐시에 의해 POST 요청은 재사용되지 않음
브라우저 히스토리에 저장되지 않아서 뒤로 가기, 앞으로 가기에 영향을 미치지 않음
GET과 POST의 차이점 정리
사용목적: GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용함
요청에 body 유무: GET 은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없음. POST는 body에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재함
멱등성 (idempotent): GET 요청은 멱등이며, POST는 멱등이 아님
멱등성: 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미, 동일한 요청을 여러 번 보내도 결과가 변화의 유무를 의미
HTTP method 중 PUT과 PATCH의 차이점
공통점: 리소스의 업데이트
PUT method
서버에 새로운 리소스를 생성하거나 기존 리소스를 완전히 대체(전체 업데이트)하는 데 사용됨
클라이언트는 리소스의 전체 콘텐츠를 요청 메시지의 본문에 담아 PUT 요청을 보냄
만약 해당 리소스가 이미 존재한다면, 요청된 데이터로 리소스를 완전히 대체함.
따라서 PUT은 전체 리소스를 업데이트하는 데에 사용되므로, 클라이언트는 리소스의 현재 상태를 알지 못해도 됨
PATCH method
서버의 리소스를 일부분만 수정(부분 업데이트)하는 데 사용됨
클라이언트는 리소스에 대한 변경사항을 요청 메시지의 본문에 담아 PATCH 요청을 보냄
PATCH는 리소스의 특정 필드나 속성을 수정하는 데에 사용되며, 다른 필드나 속성은 변경되지 않음
따라서 PATCH는 리소스의 부분적인 변경을 위해 사용되므로, 클라이언트는 리소스의 현재 상태를 알아야 함
HTTP 상태 코드(status code)란?
웹 서버가 클라이언트에게 응답할 때, 요청이 성공적으로 처리되었는지 또는 에러가 발생했는지를 나타내는 3자리 숫자로 이루어진 코드이다. 다양한 상태 코드가 있으며, 각각의 코드는 특정한 의미를 가지고 있다.
상태 코드의 첫 번째 숫자는 다음과 같은 범주로 구분된다.
1xx (Informational): 요청을 받았으며, 프로세스를 계속함
2xx (Successful): 요청이 성공적으로 처리됨
3xx (Redirection): 요청을 완료하기 위해 추가 동작이 필요함
4xx (Client Error): 클라이언트의 요청에 오류가 있음
5xx (Server Error): 서버가 유효한 요청을 처리하지 못함
HTTP header란?
웹 브라우저와 웹 서버 간의 통신에서 전송되는 메타데이터 정보로, 요청과 응답의 부가적인 정보를 제공한다. HTTP 헤더는 요청과 응답 메시지의 시작 부분에 포함되며, 각각의 헤더는 헤더 이름과 해당하는 값으로 구성된다.
요청 헤더
클라이언트(웹 브라우저 등)가 웹 서버에게 요청을 보낼 때, 요청에 관련된 정보를 담습니다.
가장 일반적인 요청 헤더로는 "Host", "User-Agent", "Accept", "Content-Type" 등이 있습니다.
응답 헤더
웹 서버가 클라이언트에게 응답할 때, 응답과 관련된 정보를 담습니다.
가장 일반적인 응답 헤더로는 "Date", "Server", "Content-Type", "Content-Length" 등이 있습니다.
엔티티 헤더
엔티티 헤더는 요청 또는 응답 메시지의 본문에 대한 정보를 담습니다.
HTTP 헤더는 클라이언트와 서버가 서로 간의 요청과 응답을 이해하고 처리할 수 있도록 중요한 역할을 한다. 또한, 특정한 기능을 지원하기 위해 커스텀 헤더를 정의하여 사용하는 경우도 있다. HTTP 헤더는 웹 애플리케이션의 동작에 영향을 미치므로, 개발자들은 헤더를 적절히 사용하여 원하는 기능을 구현하고 웹 통신의 안전성과 성능을 개선할 수 있다.
HTTP의 무상태성(Stateless)이란?
HTTP 프로토콜의 특징 중 하나로서, 서버가 클라이언트의 상태를 보존하지 않는 것을 의미한다. 서버의 확장성에 용이하다는 장점이 있지만, 클라이언트가 추가 데이터를 전송해야 하는 단점이 있다. 사용자 인증과 같은 상태 정보를 처리하기 위해서는 쿠키(Cookie)와 세션(Session)과 같은 기술을 활용하여 상태정보를 관리해야 한다.
'Computer Network study' 카테고리의 다른 글
TCP (Transmission Control Protocol) (0) | 2023.08.10 |
---|---|
신뢰적 데이터 전송 (Sliding window, Go Back N, Selective Repeat) (0) | 2023.08.10 |
UDP & 신뢰적 데이터 전송의 원리 (0) | 2023.08.02 |
HTTPS & DNS (0) | 2023.08.02 |
컴퓨터 네트워크와 네트워크 레이어 (1) | 2023.07.26 |