YEOJIN-DEV

HTTP Header

June 23, 2018 | 7 Minute Read

HTTP Header는 HTTP에서 서버, 클라이트언트가 무엇을 할지 결정하는 정보가 담겨 있다.

헤더는 크게 5가지로 분류할 수 있다.

  1. 일반 헤더 : 클라이언트와 서버 양쪽 모두가 사용하는 헤더이다.
  2. 요청 헤더 : 요청(request)를 위한 헤더이다.
  3. 응답 헤더 : 응답(response)를 위한 헤더이다.
  4. 엔터티 헤더 : 본문에 대한 헤더이다.
  5. 확장 헤더 : 애플리케이션 개발자들이 만든 헤더이다. 이는 비표준이다.

각각의 헤더 필드를 표로 정리하면 아래와 같다.

General Header

헤더 설명
Connection 클라이언트와 서버가 요청/응답 연결에 대한 옵션을 정할 수 있게 해준다.
Date 메시지가 언제 만들어졌는지에 대한 날짜와 시간을 제공한다.
MIME-Version 발송자가 사용한 MIME의 버전을 알려준다.
Trailer chunked transfer 인코딩으로 인코딩된 메시지의 끝 부분에 위치한 헤더들의 목록을 나열한다.
transfer-Encoding 수신자에게 안전한 전송을 위해 메시지에 어떤 인코딩이 적용되었는지 말해준다.
Upgrade 발송자가 업그레이드하길 원하는 새 버전이나 프로토콜을 말해준다.
Via 이 메시지가 어떤 중개자(프락시, 게이트웨이)를 거쳐 왔는지 보여준다.
Cache-Control 메시지와 함께 캐시 지시자를 전달하기 위해 사용한다.

Request Header

General

헤더 설명
Client-IP 클라이언트가 실행된 컴퓨터의 IP를 제공한다.
From 클라이언트 사용자의 메일 주소를 제공한다.
Host 요청의 대상이 되는 서버의 호스트 명과 포트를 준다.
Referer1 현재의 요청 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과 같으나 프락시에서 연결을 맺을 때 쓰인다.

Response Header

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 가장 최근 이 엔터티가 변경된 일시
  1. ‘referrer’가 철자에 맞지만 초기 문서에 ‘referer’로 잘못 기입되어 있던 것이 관례로 굳어졌다.