Network/HTTP

[HTTP] 1. HTTP 메세지는 어떻게 구성되었는가? Start Line, Header Body로 보는 HTTP 메세지

Dev.Cho 2021. 5. 9. 21:52

HTTP 메세지 구조

 HTTP의 메세지는 3가지 부분으로 나뉘어져 있다.

  • Start Line(시작 라인)
  • Header(헤더)
  • Body(바디)

HTTP메세지는 ASCII Characterset을 사용하는 문자열로 전송이 되기 때문에 필요한 부분을 파싱하기 위해서는 각 부분의 구조화가 필요하다. 각 부분은 다음과 같이 구조화된다.

그림1. HTTP 메세지의 구조

Start Line
한 줄로 이루어져 있다. 첫 번째 줄이 무조건 시작 라인이 되며 시작 라인은 두 줄 이상은 될 수 없다.
Header
헤더는 첫 줄을 제외한 공백라인이 나오기 전까지의 줄이다. 헤더는 수십줄, 수백줄이 될 수도 있다.
Body
바디는 공백 라인 뒤의 모든 라인으로 이루어져 있다.

간단한 규칙이다. 자 그러면 각 부분에서 어떤 일을 하는지 살펴보자.

 

Start Line(시작 라인)

시작 라인은 요청 메세지인지 응답 메세지인지에 따라 다른 형식을 가진다.

 

Start Line(시작 라인) - 요청 메세지

클라이언트가 서버에 요청하는 메세지일 경우 시작 라인의 형식은 다음과 같다. 

 

그림2. 시작 라인

시작 라인은 HTTP Method, 경로 및 질의 정보(Path or Query), HTTP Version 세가지로 이루어진다.

 

HTTP Mehod

 

 

그림3. GET 메서드 요청

HTTP Method는 메세지를 수신하는 서버에서 어떤 작업을 해야 하는지를 알려준다. HTTP Method에는 GET, POST, PUT, PATCH, DELETE 등이 있다. <그림2>의 GET 메서드는 리소스를 조회하는 기능이다. 따라서 <그림3>과 같이 서버에서는 리소스 조회 후 결과값을 클라이언트에 반환해준다.

 

경로 및 질의 정보(Path or Query)

 

그림4. 그림2의 위치 및 경로 정보

경로 및 질의 정보(Path or Query)는 리소스가 위치한 경로를 명시한다. <그림4>의 요청을 웹브라우저에 날렸을 때, <그림4>의 빨간색 밑줄 부분(Path or Query)이 <그림2>의 Path or Query 부분이 된다.

 

 

HTTP Version

그림5. HTTP Version

HTTP는 버전 별로 프로토콜이 다르다. 예를 들어 전송계층 프로토콜은 HTTP/3은 UDP이고 HTTP/2는 TCP이다. 이러한 차이점을 인식하고 버전 별로 처리되어야 하는 방식이 다른 것이 있어 HTTP Version을 명시해준다.

 

Start Line(시작 라인) - 응답 메세지

위와 같은 요청이 클라이언트로 부터 있었을 때 서버의 응답 메세지는 HTTP Version, 응답 메세지 두 분으로 이루어진다.

 

그림6. 응답 메세지의 시작 라인

HTTP Version

서버에서 보내는 HTTP 프로토콜의 버전이다.

 

응답 메세지

응답 메세지는 클라이언트의 요청 메세지가 잘 처리되었는지에 대한 응답을 해주는 것이다. 100~500번대의 응답 메세지가 있는데, 이는 이후 글에서 자세히 다루도록 하겠다.

 

 

헤더(Header)

그림7. 헤더

 헤더에는 HTTP 메세지에 대한 정보를 명시한다. <그림7>과 같은 서버에 요청하는 시작라인은 헤더의 kotlinworld.com를 Host로 하는 서버에 날아가야 한다. TCP에서 목적지에 대한 정보가 들어가지만, 하나의 IP Address는 여러 Host를 가질 수 있으므로 다음과 같이 사용해야 어떤 Host에 시작 라인 메서드가 질의되어야 하는지 알 수 있다.

 

 이 외에도 Content-Type, Content-Length와 같은 Body의 Content Type과 Length를 명시하는 헤더 값이 있지만, 헤더 값은 수백개가 있으므로 이 정도로만 보고 넘어가도록 하겠다.

 

바디(Body)

그림8. 바디

 메세지 바디에는 실제 전송을 하는 데이터가 들어간다. 요청 메세지의 GET메서드는 바디를 보통 가지고 있지 않으므로, 바디를 항상 가진 응답 메세지로 예시 그림을 그렸다. 

 

 

정리

이 글에서는 HTTP 메세지가 어떤 구조를 가지는지를 알아봤다. HTTP 메세지 구조의 각 부분이 어떤 역할을 하는지 알고 가야 HTTP에 대한 자세한 내용을 배울 때 편리하다. 꼭 제대로 짚고 넘어가자.

반응형