HTTP 헤더는 HTTP 전송에 필요한 부가정보를 담기 위해 사용합니다.
예를 들어, 메세지 바디(페이로드)의 내용, 메세지 바디의 크기, 압축, 인증, 서버 정보, 캐시 정보 등입니다.
지정된 표준 헤더는 굉장히 많습니다.
주요한 표현 헤더만 몇 가지 기록하는 글입니다.
Content-Type
: 표현 데이터의 형식text/html
, application/json
,image/png
등 MIME 타입Content-Encoding
: 표현 데이터의 압축 방식gzip
, deflate
, identity
, compress
(특허권 이슈로 현재 사용하지 않음)Content-Language
: 표현 데이터의 자연 언어ko
, en
, en-US
등 사용자가 선호하는 언어에 따라 사용자를 구분합니다.Content-Length
: 표현 데이터의 크기(길이)Content-Encoding
이 아닌 Transfer-Encoding
헤더를 사용한다면, chunked
방식으로 인코딩을 수행합니다. 이 방식은 데이터를 분할하여 응답하기 때문에 전체 데이터 크기를 알 수 없습니다. 따라서 표현 데이터의 길이를 명시해야하는 경우 Transfer-Encoding
을 사용해선 안됩니다.From
: 사용자 에이전트의 이메일 정보Requests
에서 사용합니다.Referer
: 이전 웹 페이지 주소youtube.com
페이지에서 google.com
로 이동하는 경우, Referer : youtube.com
을 포함하여 요청합니다.Requests
에서 사용합니다.Referer
는 단어 Referrer
의 오탈자이지만 스펙으로 굳어졌습니다.User-Agent
: 사용자 에이전트 애플리케이션 정보Requests
에서 사용합니다.Host
: 요청한 호스트 정보(도메인)Requests
에서 사용합니다.Origin
: 서버로 POST
요청을 보낼 때, 요청을 시작한 주소Requests
에서 사용합니다.Authorization
: 인증 토큰(JWT 등)을 서버로 보낼 때 사용하는 헤더Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
Requests
에서 사용합니다.Server
: 요청을 처리하는 Origin 서버의 소프트웨어 정보Responses
에서 사용합니다.Server: Apache/2.2.22 (Debian)
Date
: 메세지가 발생한 날짜와 시간Responses
에서 사용합니다.Date: Tue, 2 Feb 1994 08:12:31 GMT
Location
: 페이지 리디렉션Location
헤더가 있으면 Location
의 위치로 리다이렉트(자동 이동)합니다.Location
값은 요청에 의해 생성된 리소스 URI입니다.Responses
에서 사용합니다.Allow
: 허용 가능한 HTTP 메서드Responses
에서 사용합니다.Allow: GET, HEAD, PUT
Retry-After
: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간Retry-After: Fri, 31 Dec 2020 23:59:59 GMT(날짜 표기)
Retry-After: 120(초 단위 표기)
컨텐츠 협상 헤더는 클라이언트가 선호하는 표현 요청입니다. Requests
에서만 사용 가능합니다.
한 마디로, 클라이언트(나)가 요청을 보낼 때, 서버(상대)가 응답을 이렇게 주면 좋겠다라는 의미입니다.
내가 지금 너희 서버에 요청을 보낼건데, 이런 표현 방식으로 보내줬으면 좋겠어
라는 의미입니다.
하지만, 서버는 이 컨텐츠 협상 헤더를 무시하고 정해진 표현 방식으로 응답할 수 있습니다.
Accept
: 클라이언트가 선호하는 미디어 타입 전달
Accept : "application/json"
json
양식으로 받고싶다는 의미입니다.Accept-Charset
: 클라이언트가 선호하는 문자 인코딩
Accept-Encoding
: 클라이언트가 선호하는 압축 인코딩
Accept-Language
: 클라이언트가 선호하는 자연 언어
Accept-Language: ko
로 요청했을 때, 서버가 한국어를 지원하는 서버라면 우선순위에 따라 한국어로 된 응답을 돌려줍니다.Accept-Language: ko-KR;en-US;q=0.9
q=1
을 생략할 수 있습니다.