HTTP 헤더는 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해준다.
부가적 정보라 함은, 대표적으로 "요청자", "컨텐트 타입", "캐싱" 등등(수십 가지)가 있다.
Header의 종류
Http Header는 다음과 같이 4가지가 있다.
General header : 요청과 응답 모두에 적용되지만 바디에서 최종적으로 전송되는 데이터와는 관련이 없는 헤더.
Request header : 페치될 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더. == 내가 보내는 메세지의 헤더
Response header : 위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적인 정보를 갖는 헤더. == 내가 받은 메세지의 헤더
Entity header: 컨텐츠 길이나 MIME 타입과 같이 엔티티 바디에 대한 자세한 정보를 포함하는 헤더.
4가지를 살펴보자!
실제로 존재하는 사이트에서 위의 4가지 정보를 살펴보자.
3가지의 Header가 보인다.
(Entity Header는 request, response에 녹아있는 것 같다.)
내용이 너무 많아서 대표적인 항목만 살펴보자.
예시
"Date: Wed, 21 Oct 2015 07:28:00 GMT"
예시
Connection: close
Connection: Keep-Alive
User-Agent를 Request에 넣지 않고 요청을 했을 경우, 정보를 주지 않는 곳도 있다. 이유는 봇(스크래핑, 크롤링, 기타 등등)이 요청을 하는 경우에는 User-Agent의 경로로 오지 않기 때문이다.
하지만 봇에 User-Agent를 기입하면 이것마저도 봇이 아니라 사람이 요청한 줄 안다..ㅋㅋ
Accept는 부속 속성이 더 있다.
Accept-Language : 사용자가 원하는 언어셋이다.
Accept-Encodig : 사용자가 원하는 인코딩 방식이다.
두 가지의 속성을 더 가지고 있다.
referrer-policy : 우선 스펠링이 다르다.(오타가 스펙이 되어버렸다고 한다..) 이 헤더는 요청과 함께 얼마나 많은 레퍼럴 정보를 포함하는지 알려준다.
referer-after : 응답 헤더에 속하는 것인데, 다음에 올 요청이 이루어지기 전에 사용자가 대기해야 하는 시간을 가르킨다.
Server : 서버 소프트웨어의 정보를 표현한다.
content-encoding : 응답하는 내용의 인코딩 포맷을 표현한다.
content-type: 응답하는 내용의 타입과 문자 포맷을 표현한다.
cache-control : 캐시 관리에 대한 정보를 표현한다.
ex) cache-control :
no-cache(서버측에 캐시를 사용해도 되는지 확인),
no-store(캐싱x),
must-revalidate(만료 캐시만 서버측에 확인),
public(중개 서버에 저장 가능)/private(사용자 브라우저에만 등록),
max-age(캐시 유효기간)
date : 응답 메세지가 생성된 시간을 표현한다.
vary : 캐시된 응답을 향후의 응답에 사용할 기준을 표현한다.
ex) Vary: User-Agent
이렇게 설정되어 있으면, 모바일 유저에게 데스크탑 유저를 위한 캐시 컨텐츠가 제공되지 않게 할 수 있다.
Set-Cookie : 서버에서 사용자에게 세션 쿠키 정보를 전달한다.
Age : max-age내에서 캐시가 얼마나 지났는지 초 단위로 표현한다.