HTTP Header
June 23, 2018 | 7 Minute Read
HTTP Header는 HTTP에서 서버, 클라이트언트가 무엇을 할지 결정하는 정보가 담겨 있다.
헤더는 크게 5가지로 분류할 수 있다.
- 일반 헤더 : 클라이언트와 서버 양쪽 모두가 사용하는 헤더이다.
- 요청 헤더 : 요청(request)를 위한 헤더이다.
- 응답 헤더 : 응답(response)를 위한 헤더이다.
- 엔터티 헤더 : 본문에 대한 헤더이다.
- 확장 헤더 : 애플리케이션 개발자들이 만든 헤더이다. 이는 비표준이다.
각각의 헤더 필드를 표로 정리하면 아래와 같다.
헤더 |
설명 |
Connection |
클라이언트와 서버가 요청/응답 연결에 대한 옵션을 정할 수 있게 해준다. |
Date |
메시지가 언제 만들어졌는지에 대한 날짜와 시간을 제공한다. |
MIME-Version |
발송자가 사용한 MIME의 버전을 알려준다. |
Trailer chunked transfer |
인코딩으로 인코딩된 메시지의 끝 부분에 위치한 헤더들의 목록을 나열한다. |
transfer-Encoding |
수신자에게 안전한 전송을 위해 메시지에 어떤 인코딩이 적용되었는지 말해준다. |
Upgrade |
발송자가 업그레이드하길 원하는 새 버전이나 프로토콜을 말해준다. |
Via |
이 메시지가 어떤 중개자(프락시, 게이트웨이)를 거쳐 왔는지 보여준다. |
Cache-Control |
메시지와 함께 캐시 지시자를 전달하기 위해 사용한다. |
General
헤더 |
설명 |
Client-IP |
클라이언트가 실행된 컴퓨터의 IP를 제공한다. |
From |
클라이언트 사용자의 메일 주소를 제공한다. |
Host |
요청의 대상이 되는 서버의 호스트 명과 포트를 준다. |
Referer |
현재의 요청 URI가 들어있었던 문서의 URL을 제공한다. |
UA-Color |
클라이언트 기기 디스플레이의 색상 능력에 대한 정보를 제공한다. |
UA-CPU |
클라이언트 CPU의 종류나 제조사를 알려준다. |
UA-Disp |
클라이언트의 디스플레이 능력에 대한 정보를 제공한다. |
UA-OS |
클라이언트 기기에서 동작 중인 운영체제의 이름과 버전을 알려준다. |
UA-Pixels |
클라이언트 기기 디스플레이에 대한 픽셀 정보를 제공한다. |
User-Agent |
요청을 보낸 애플리케이션의 이름을 서버에게 말해준다. |
Accept 관련 헤더
요청 헤더에서 Accept 헤더는 중요한 의미를 갖는데, 서버에게 클라이언트가 바라는 데이터를 말해줄 수 있기 때문이다. 적절한 Accept 헤더는 서버가 클라이언트에게 무엇을 보낼지 결정하는데 도움을 준다. 이는 곧 클라이언트가 처리할 수 없는 ‘쓸데없는 데이터’ 전송을 막을 수 있음을 의미한다.
헤더 |
설명 |
Accept |
서버에게 서버가 보내도 되는 미디어 종류를 말해준다. |
Accept-Charset |
서버가 보내도 되는 문자집합을 말해준다. |
Accept-Encoding |
서버가 보내도 되는 인코딩을 말해준다. |
Accept-Language |
서버가 보내도 되는 언어를 말해준다. |
TE |
서버가 보내도 되는 확장 전송 코딩(compress, gzip 등)을 말해준다. |
조건부 요청 헤더
특정 조건에 부합할 때만 서버가 응답을 보내도록 헤더를 설정할 수 있다.
헤더 |
설명 |
Expect |
클라이언트가 요청에 필요한 서버의 행동을 열거할 수 있게 해준다. 이를 만족하지 않으면 417(Expectation Failed) 상태를 응답한다. |
If-Match |
문서의 엔터티 태그가 주어진 엔터티 태그와 일치하는 경우에만 문서를 가져온다. |
If-Modified-Since |
주어진 날짜 이후에 리소스가 변경되지 않았다면 요청을 제한한다. |
If-None-Match |
문서의 엔터티 태그가 주어진 엔터티 태그와 일치하지 않은 경우에만 문서를 가져온다. |
If-Range |
문서의 특정 범위에 대한 요청을 할 수 있게 해준다. |
If-Unmodified-Since |
주어진 날짜 이후에 리소스가 변경되었다면 요청을 제한한다. |
Range |
서버가 범위 요청을 지원한다면, 리소스에 대한 특정 범위를 요청한다. 만약 ‘bytes=100-200’이라면 리소스 크기가 100에서 200 사이의 바이트일 때만 응답을 보낸다. |
요청 보안 헤더
간단한 인증에 대한 헤더이다.
헤더 |
설명 |
Authorization |
클라이언트가 서버에게 제공하는 인증 그 자체에 대한 정보를 담고 있다. |
Cookie |
클라이언트가 서버에 토큰을 전달할 때 사용한다. |
Cookie2 |
클라이언트가 지원하는 쿠키의 버전을 알려준다. |
프락시 요청 헤더
헤더 |
설명 |
Max-Forwards |
요청이 원 서버로 향하는 과정에서 다른 프락시나 게이트웨이로 전달될 수 있는 최대 횟수. TRACE 메소드와 관련이 있다. |
Proxy-Authorization |
Authorization과 같으나 프락시에서 인증을 할 때 쓰인다. |
Proxy-Connection |
Connection과 같으나 프락시에서 연결을 맺을 때 쓰인다. |
General
헤더 |
설명 |
Age |
응답이 얼마나 오래되었는지 말해준다. |
Public |
서버가 특정 리소스에 대해 지원하는 요청 메서드의 목록을 말해준다. |
Retry-After |
현재 리소스가 사용 불가능한 상태일 때, 언제 가능해지는 날짜 혹은 시각을 말해준다. |
Server |
서버 애플리케이션의 이름과 버전을 말해준다. |
Title |
HTML 문서에서 주어진 것과 같은 제목 |
Warning |
사유 구절에 있는 것보다 더 자세한 경고 메시지 |
협상 헤더
헤더 |
설명 |
Accept-Ranges |
서버가 자원에 대해 받아들일 수 있는 범위의 형태 |
Vary |
서버가 확인해보아야 하기 때문에 응답에 영향을 줄 수 있는 헤더들의 목록 |
요청 보안 헤더
간단한 인증에 대한 헤더이다.
헤더 |
설명 |
Proxy-Authenticate |
프락시에서 클라이언트로 보낸 인증요구의 목록 |
Set-Cookie |
서버가 클라이언트를 인증할 수 있도록 클라이언트 측에 토큰을 설정하기 위해 사용한다. |
WWW-Authenticate |
서버에서 클라이언트로 보낸 인증요구의 목록 |
엔터티 헤더
응답 메시지에 포함된 엔터디 헤더에 대한 정보를 담고 있다.
헤더 |
설명 |
Allow |
이 엔터티에 대해 수행될 수 있는 요청 메서드들을 나열한다. |
Location |
클라이언트에게 엔터티가 실제로 어디에 위치하고 있는지 알려준다. 새로운 URL 주소를 알려줄 때 사용한다. |
콘텐츠 헤더
콘텐츠 헤더는 엔터티의 콘텐츠에 대한 구체적인 정보를 제공한다.
헤더 |
설명 |
Content-Base |
본문에서 사용된 상대 URL을 계산하기 위한 Base URL |
Content-Encoding |
본문에 적용된 인코딩 |
Content-Language |
본문을 이해하는데 가장 적절한 자연어 |
Content-Length |
본문의 길이 또는 크기 |
Content-Location |
리소스의 실제 위치 |
Content-MD5 |
본문의 MD5 체크섬 |
Content-Range |
전체 리소스에서 이 엔터티가 해당하는 범위를 바이트 단위로 표현 |
Content-Type |
이 본문이 어떤 종류의 객체인지 말해준다. |
엔터티 캐싱 헤더
엔터티의 캐싱과 관련된 헤더이다.
헤더 |
설명 |
ETag |
이 엔터티에 대한 엔터티 태그 |
Expires |
이 엔터티가 더이상 유효하지 않아 원본을 다시 받아와야 하는 일시 |
Last-Modified |
가장 최근 이 엔터티가 변경된 일시 |