[HTTP] HTTP 메세지
대부분의 내용은 인프런 김영한 강사님의 모든 개발자를 위한 HTTP 웹 기본 지식을 참고했습니다.
HTTP 메세지
HTTP 메세지는 요청(request)과 응답(response) 2가지가 있습니다.
이 글에서는 요청과 응답에서 HTTP 메세지의 구조를 알아보겠습니다.
HTTP 메세지의 구조
HTTP 메세지는 크게 start-line, HTTP Header, Message Body로 이루어져 있습니다.
요청 HTTP 메세지

이전에서부터 계속 공부했듯이 HTTP 요청은 클라이언트가 작업을 시작하기 위해 보내는 메세지입니다.
1. request-line
요청 메세지에서 start-line은 request-line이라고 불립니다.
request-line의 구조는 아래와 같습니다.
<HTTP Method> <요청 대상 URL> <HTTP 버전>
<HTTP Method>
클라이언트가 서버에게 요청하는 동작을 나타내는 부분입니다.
GET, POST, PUT, DELETE 등이 있습니다.
<요청 대상 URL>
클라이언트가 요청하는 대상의 경로를 나타내는 부분입니다.
POST / HTTP/1.1
GET /background.png HTTP/1.0
이런 형식을 가질 수 있습니다.
<HTTP 버전>
클라이언트가 사용하는 HTTP 버전을 나타내는 부분입니다.
2. HTTP Header
HTTP Header에는 HTTP 전송에 필요한 모든 부가정보가 들어있습니다.
Message Body의 정보, 크기, 압축 여부, 인증 정보 등 많은 정보가 들어갑니다.
Host
요청이 전송되는 호스트의 도메인 이름 또는 IP 주소를 나타냅니다.
User-Agent
클라이언트 소프트웨어의 식별자를 포함합니다. 이 헤더를 통해 서버는 요청을 보내는 클라이언트의 유형을 식별할 수 있습니다.
Content-Type
요청 본문의 데이터 유형을 나타냅니다. 주로 POST 요청과 함께 사용되며, 서버가 요청 본문을 올바르게 해석하는 데 도움이 됩니다.
Content-Length
요청 본문의 길이를 나타냅니다. 서버가 요청 본문을 수신하고 처리할 때 유용합니다.
Accept
클라이언트가 받을 수 있는 콘텐츠 유형을 나타냅니다. 이를 통해 클라이언트는 서버에게 어떤 유형의 콘텐츠를 선호하는지 알릴 수 있습니다.
Header에 들어갈 수 있는 정보는 위와 같은 정보들이 있고 필요에 따라서 추가될 수 있습니다.
3. Message Body
Message Body에는 실제로 전송할 데이터가 들어갑니다.
파일업로드 데이터, JSON, 이미지 등 byte로 표현할 수 있는 모든 정보를 Body에 담아 전송할 수 있습니다.
Message Body는 선택적으로 포함되며, 일반적으로 POST요청과 함께 사용됩니다.
응답 HTTP 메세지

1. status-line
응답 메세지에서 start-line은 status-line이라고 불립니다.
status-line의 구조는 아래와 같습니다.
<HTTP 버전> <상태 코드> <상태 메시지>
<상태 코드>
서버가 요청을 성공적으로 처리했는지 또는 어떤 문제가 발생했는지를 나타내는 세 자리 숫자입니다.
일반적으로 1xx부터 5xx까지 범위가 있으며, 각 코드에는 특정 의미가 있습니다.
<상태 메시지>
상태 코드에 대응하는 간단한 설명을 제공합니다.
<HTTP 버전>
서버가 사용하는 HTTP 버전을 나타내는 부분입니다.
2. HTTP Header
응답 메세지의 HTTP Header에는 응답의 메타데이터를 포함하고 있습니다.
일반적인 응답 메세지의 Header에는 아래와 같은 것들이 있습니다.
Content-Type
응답 본문의 데이터 유형을 나타냅니다.
Content-Length
응답 본문의 길이를 나타냅니다.
Date
응답이 생성된 날짜와 시간을 나타냅니다.
응답 메세지의 Header 또한 필요에 따라서 추가될 수 있습니다.
3. Message Body
Message Body에도 마찬가지로 서버가 클라이언트에게 실제로 전송할 데이터가 들어갑니다.
Message Body는 주로 HTML, JSON, 이미지, 파일 등의 형식입니다. 이러한 본문의 형식은 Content-Type에 의해 결정됩니다.
Content-Type에는 MIME타입이 포함되는데, 이를 통해 클라이언트가 Body의 데이터를 올바르게 해석하는데 도움을 줍니다.
text/plain
텍스트 데이터를 나타냅니다.
text/html
HTML 형식의 문서를 나타냅니다.
application/json
JSON 형식의 데이터를 나타냅니다.
application/xml
XML 형식의 데이터를 나타냅니다.
image/jpeg:
JPEG 이미지를 나타냅니다.
이 외에도 많은 MIME타입이 있습니다.
해당 글에서는 요청 메세지의 HTTP Method와 응답 메세지의 HTTP Status에 대해서 자세히 설명하지 않았는데,
다음 글에서 이에 대해서 설명해 링크를 걸어놓겠습니다.