3.2. 메시지의 각 부분

HTTP 메시지는 단순한, 데이터의 구조화된 블록이다.
다음 그림의 예를 통해 살펴보자.

                시작줄 | HTTP/1.0 200 OK           |
                      ---------------------------
클라이언트 <----    헤더 | Content-type: text/plain  | <------ 서버
                     | Content-length: 19        |
                      ---------------------------
                 본문 | Hi! I'm a message!        |

각 메시지는 클라이언트로부터의 요청이나 서버로부터의 응답 중 하나를 포함한다.
메시지는 시작줄, 헤더 블록, 본문 이렇게 세 부분으로 이루어진다.
시작줄은 이것이 어떤 메시지인지 서술하며, 헤더 블록은 속성을, 본문은 데이터를 담고 있다.
본문은 아예 없을 수도 있다.

시작줄과 헤더는 그냥 줄 단위로 분리된 아스키 문자열이다.
각 줄은 캐리지 리턴(ASCII 13)과 개행 문자(ASCII 10)로 구성된 두 글자의 줄바꿈 문자열로 끝난다.
이 줄바꿈 문자열은 'CRLF'라고 쓴다.
HTTP 명세에 따른다면 줄바꿈 문자열은 CRLF이지만 견고한 애플리케이션이라면 그냥 개행 문자도 받아들일 수 있어야 한다는 점을 언급할 필요가 있을 듯 하다.
오래되거나 잘못 만들어진 HTTP 애플리케이션들 중에서는 캐리지 리턴과 개행 문자 모두를 항상 전송하지는 않는 것들도 있다.

엔터티 본문이나 메시지 본문(혹은 그냥 '본문')은 단순히 선택적인 데이터 덩어리이다.
시작줄이나 헤더와는 달리, 본문은 텍스트나 이진 데이터를 포함할 수도 있고 그냥 비어있을 수도 있다.

위 그림의 예에서 헤더는 본문에 대한 꽤 많은 정보를 준다.
Content-Type 줄은 본문이 무엇인지 말해준다.(이 예에서는 플레인 텍스트 문서다.)
Content-Length 줄은 본문의 크기를 말해준다.
이 예에서는 19바이트이다.