이번 포스팅에서는 HTTP 전송 과정에서 부가 정보를 표현하는 header들에 대해서 정리하겠습니다.
표현헤더는 표현 데이터의 형식, 압축방식, 자연 언어, 길이 등을 설명하는 헤더입니다. 그리고 앞에 "Content"가 붙습니다.
- Content-Type : 표현 데이터의 형식
- Content-Encoding : 표현데이터의 압축 방식
- Content-Language : 표현 데이터의 자연 언어
- Content-Length : 표현 데이터의 길이
콘텐츠 협상(Content negotiation)
클라이언트가 서버에 요청을 할 때 선호하는 미디어 타입, 인코딩, 언어들을 서버에 전달할 수 있습니다. 앞에 "Accept"가 붙습니다.
- Accept : 클라이언트가 선호하는 미디어 타입 전달
- Accept-Charset : 클라이언트가 선호하는 문자 인코딩
- Accept-Encoding : 클라이언트가 선호하는 압축 인코딩
- Accept-Language : 클라이언트가 선호하는 자연 언어
선호하는 언어를 전달하는 예시입니다.
Accept-Language: ko-KR;ko;q=0.9,en-US;q=0.8,en;q=0.7
- q는 Quaality Values 값으로 0~1 사이의 값을 가지며 값이 클수록 우선순위가 높습니다.
<우선순위>
- ko-KR;q=1(q 생략)
- ko;q=0.9
- en-US;q=0.8
- en;q=0.7
요청에 사용되는 헤더
From : 유저 에이전트의 이메일 정보
Referer : 이전 웹 페이지 주소
- 현재 요청된 페이지의 이전 웹 페이지 주소를 알 수 있습니다.
- A → B로 이동하는 경우 B를 요청할 때 Referer: A를 포함해서 요청(Referer를 사용하면 유입경로 수집 가능)
User-Agent : 유저 에이전트 애플리케이션 정보
- 클라이언트의 애플리케이션 정보(웹 브라우저 정보, 등등)를 알 수 있습니다.
- 어떤 종류의 브라우저에서 장애가 발생하는지 파악이 가능합니다.
ex) user-agent : Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36
Host : 요청한 호스트 정보(도메인)
- 필수로 작성해야하는 헤더 입니다.
- 하나의 서버가 여러 도메인을 처리해야 할 때 호스트 정보를 명시하기 위해 사용합니다.
- 또한, 하나의 IP 주소에 여러 도메인이 적용되어 있을 때 호스트 정보를 명시하기 위해 사용합니다.
Origin : 서버로 POST 요청을 보낼 때, 요청을 시작한 주소를 나타냄
- 요청을 보낸 주소와 받는 주소가 다르면 CORS 에러가 발생합니다.
- 응답 헤더의 Access-Control-Allow-Origin와 관련이 있는 헤더입니다.
Authorization: 인증 토큰(e.g. JWT)을 서버로 보낼 때 사용하는 헤더
- ex) Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
응답에 사용되는 헤더
Server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
- ex) Server: Apache/2.2.22 (Debian), Server: nginx
Date: 메시지가 발생한 날짜와 시간
- ex) Date: Tue, 15 Nov 1994 08:12:31 GMT
Location: 페이지 리디렉션
- 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 리다이렉트 합니다.
- 201(Created): Location 값은 요청에 의해 생성된 리소스 URI 입니다.
- 3xx(Redirection): Location 값은 요청을 자동으로 리다이렉션하기 위한 대상 리소스를 가리킵니다.
Allow: 허용 가능한 HTTP 메서드
- 405(Method Not Allowed)에서 응답에 포함됩니다.
ex) Allow: GET, HEAD, PUT,
Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
- 503(Service Unavailable): 서비스가 언제까지 불능인지 알려줄 수 있습니다.
Retry-After: Fri, 31 Dec 2020 23:59:59 GMT(날짜 표기)
- Retry-After: 120(초 단위 표기)
Reference
https://en.wikipedia.org/wiki/List_of_HTTP_header_fields