http 메시지는 서버와 클라이언트 간에 데이터가 교환되는 방식입니다. 메시지 타입은 크게 두 가지가 있는데 흔히 알고있다시피 request, response로 구분합니다.
HTTP 메시지는 ASCII로 인코딩된 텍스트 정보이며 여러 줄로 구성되어 있습니다.
프로토콜의 헤더는 프로토콜의 기능을 제공하기 위해 담고 있는 최소한의 정보라고 할 수 있습니다. 헤더에 불필요한 내용이 많으면 데이터의 크기가 커지고 전송속도 또한 보장할 수 없기 때문에 설계할 때 부터 꼭 필요한 내용만 담아야 합니다.
HTTP 메시지의 시작 줄과 HTTP 헤더를 묶어서 요청 헤드(head)라고 부르며, 이와 반대로 HTTP 메시지의 페이로드는 본문(body)이라고 합니다.
start-line
에는 실행되어야 할 요청, 또은 요청 수행에 대한 성공 또는 실패가 기록되어 있습니다.
옵션으로 HTTP 헤더 세트가 들어갑니다. 여기에는 요청에 대한 설명, 혹은 메시지 본문에 대한 설명이 들어갑니다.
요청에 대한 모든 메타 정보가 전송되었음을 알리는 빈 줄(blank line)이 삽입됩니다.
body
에는 요청과 관련된 내용(HTML 폼 콘텐츠 등)이 옵션으로 들어가거나, 응답과 관련된 문서(document)가 들어갑니다.
HTTP를 구성하는 요소들 중에서 가장 다양한 정보를 가지고 있는 것이 HTTP 헤더필드 입니다.
다양한 헤더 필드가 있는데 다음과 같이 크게 네 분류로 구분할 수 있습니다.
end-to-end라는 이름에서도 알 수 있듯이 최종 수신자에게 전달되어야 하는 헤더입니다.
request에 대해서는 서버, response에 대해서는 클라이언트입니다.
중간 프록시는 종단간 헤더를 수정되지 않은 상태로 재전송해야하며, 캐시는 이를 반드시 저장해야합니다.
이러한 헤더는 단일 전송-레벨 연결에서만 의미가 있으며 프록시에의해 재전송되거나 캐시되어선 안됩니다.
Connection, Keep-Alive, Proxy-Authenticate, Proxy-Authorization, TE, Trailer, Transfer-Encoding, Upgrade
이 해당됩니다.
홉간 헤더는 Connection 일반 헤더를 사용해 설정될 수도 있음에 유의해야합니다.
❝ 🕶 이번 포스팅에서는 HTTP 헤더에 대한 개요를 살펴봤고 다음 포스팅에서는 각각의 헤더 필드의 내용을 자세하게 살펴보도록 하겠습니다. ❞