http 헤더 필드는 다음과 같은 구성을 하고 있다
http 전송에 필요한 모든 부가 정보가 이 헤더에 들어있다.
과거의 헤더는 위 사진과 같이 분류 되었다.
전달할 실제 데이터가 있는 엔티티 본문을 전달하기 위해 메세지 본문이 사용됐었다.
헤더는 엔티티 본문의 데이터를 해석할 수 있는 정보를 제공했다.
그러나 스펙이 바뀌면서 위 내용은 폐기되고 변화가 생겼다.
엔티티 개념이 "표현"으로 대체되었다. 표현 메타데이터와 표현 데이터를 더한 것이다.
메세지 본문을 통해 표현 데이터를 전달하고
메세지 본문은 페이로드라 하며
전달할 실제 데이터가 표현이고
표현 헤더는 표현 데이터를 해석할 수 있는 정보를 제공한다.
표현을 하려면 헤더에 type으로 표현 형식을 명시해준다.
표현 헤더는 전송과 응답을 둘 다 사용한다.
컨텐트 타입을 통해 표현 데이터의 형식을 설명한다. 미디어타입, 혹은 문자 인코딩 정보 등을 명시한다
컨텐트 인코딩은 표현 데이터를 압축하기 위해 사용한다
클라이언트가 서버가 보낸 데이터의 압축이 무엇으로 되어 있는지 알아야 이를 해석하므로 인코딩 헤더를 통해 부가 정보를 보내준다.
컨텐트 랭귀지는 표현 데이터의 자연 언어를 표현한다.
컨텐츠 length는 표현 데이터의 길이를 바이트 단위로 나타낸다.
전송 코딩을 사용하면 이를 사용하면 안된다.
협상은 콘텐츠 네고시에이션이라고도 하며, 클라이언트가 선호하는 표현 요청을 의미한다.
서버는 클라이언트의 요청에 맞춰 표현 데이터를 만들어준다.
accept language는 클라이언트가 원하는 자연 언어를 요청하는 것이다. 서버가 기본적으로 영어를 지원하는데 클라이언트가 한국어를 사용하면 정보를 표현하기 힘들다
그러나 서버가 한국어를 원한다는 accept language 요청을 보내면 서버가 한국어로 요청을 보낸다. 이를 헤더로 처리한다.
그러나 브라우저에 한국어를 사용하고 서브로 영어를 사용하는 클라이언트가 한국어를 요청하는데 다중 언어를 지원하고 기본으로 독일어를 지원하는 서버가 한국어를 지원하지 않으면 클라이언트가 알아듣지 못하는 독일어로 응답할 수 있다.
이를 처리하기 위해 우선순위를 사용한다.
Quality 밸류를 사용해 언어마다 우선순위를 설정하고, 이를 accept language 요청을 통해 서버가 받아 우선순위 순서대로 언어를 처리할 수 있다.
따라서 서버가 quality 밸류를 보고 영어를 응답할 수 있다.
우선순위는 구체적인 것, 즉 많이 적은 것이 우선한다.
위에서 url 주소가 더 긴것에 더 디테일하게 명시되어 있으므로 우선적으로 매칭한다.
구체적인 것을 기준으로 미디어 타입을 맞춘다. 즉 미디어 타입을 쓴 길이와 Quality 밸류를 모두 보면서 우선순위를 설정하는 것이다.
전송방식은 위 네 개로 분류할 수 있다
단순 전송은 요청에 대한 응답을 할 때 Content-length 를 통해 컨텐트의 길이값을 주는 것이다.
압축 전송은 위 단순전송처럼 답하는 내용을 서버에서 압축해 용량을 줄이고 보내는 것이다.
단 반드시 content-encoding을 추가해 무엇으로 압축했는지 명시해줘야 한다.
범위 전송은 클라이언트가 이미지 등을 받다가 중단 시 처음부터 보내지 않도록 나머지 범위를 지정해 요청하는 것이다.
정보성 헤더에 대해 알아보겠다.
from은 유저 에이전트(사용자)의 이메일 정보다
또 브라우저를 완전히 종료하고 다시 열어도 문제다.
이를 해결하기 위해 쿠키 개념이 도입됐다.
웹 브라우저에 홍길동이 로그인하면, 서버는 set-cookie를 통해 홍길동이라는 이름을 쿠키라는 헤더에 저장해 응답한다.
웹 브라우저 내부에는 쿠키 저장소가 있는데, 이 곳에 이 쿠키를 저장한다.