HTTP 헤더는 예시와 같이 스타트 라인 이후로 쭉 나열된 다음, 한 줄의 공백 후에 메세지 본문이 들어간다. 당연히 HTTP 메서드의 종류에 따라 메세지 본문은 생략될 수 있다.
HTTP 헤더에는 HTTP 전송에 필요한 모든 부가 정보들을 담는다. 예를 들면 메세지 본문의 내용, 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보 등이 있다. 표준으로 지정된 헤더 필드가 정말 많으며, 필요할 경우 임의 헤더 필드도 추가할 수 있다.
과거에 주로 사용하던 RFC2616을 기반으로 한 헤더의 분류를 살펴보자.
메세지 본문은 요청이나 응답에서 전달할 실제 데이터인
엔티티 본문
을 전달하는 데 사용하며, 엔티티 헤더
는 엔티티 본문의 데이터를 해석하기 위한 데이터 유형, 데이터 길이, 압축 정보와 같은 정보를 제공한다.
엔티티(Entity)
가 표현(Presentation)
으로 변경되면서, 표현 = 표현 메타 데이터 + 표현 데이터로 말하게 된다.
엔티티(Entity)
라는 단어가 완전히 사라졌기 때문에, 이제는 메세지 본문을 통해 표현 데이터(Presentation Data)
를 전달한다고 표현한다. 그리고 메세지 본문을 페이로드(Payload)라고 한다.
- Content-Type: 표현 데이터의 형식
- Content-Encoding: 표현 데이터의 압축 방식
- Content-Language: 표현 데이터의 자연 언어(ex> 한국어, 영어 • • • )
- Content-Length: 표현 데이터의 길이
리소스라는 것은 굉장히 추상적이기 때문에, 클라이언트와 서버 간에 데이터를 주고 받을 때는 헤더의 표현을 통해 데이터의 형식 등의 정보를 정확하게 기재해서 알린다.
또한 표현 헤더는 요청/응답 메세지에 모두 사용할 수 있다.
컨텐츠 타입은 미디어 타입과 문자 인코딩 형식을 함께 기재한다. 예를 들어 text/html
, application/json
, image/png
등이 있다.
이 필드는 표현 데이터를 압축하기 위해 사용하며, 데이터를 전달하는 측에서 압축 후 인코딩 헤더를 추가하고, 데이터를 읽는 측에서 인코딩 헤더의 정보로 압축을 해제한다. 예를 들어 gzip
, deflate
, identity
등이 있다.
이 필드는 표현 데이터의 표현 언어를 알려주기 위해 사용하며, ko
, en
, en-US
등이 있다.
바이트 단위로 기재되며, 참고로 전송 인코딩(Transfer Encoding)을 사용하면 이 필드를 사용할 수 없다.