HTTP Header
HTTP Header
HTTP 프로토콜의 리퀘스트와 리스폰스에는 반드시 메시지 헤더가 포함되어 있다. 메시지 헤더에는 클라이언트나 서버가 리퀘스트나 리스폰스를 처리하기 위한 정보가 들어 있다.
리퀘스트의 HTTP 메시지는 다음과 같다.
HTTP header 필드는
헤더 필드명: 필드 값
으로 이루어져 있다.
** HTTP 헤더 필드가 중복 된 경우에는? 브라우저마다 행동이 달라진다..
HTTP/1.1 헤더 필드
- 일반 헤더 필드
헤더 필드 명 | 설명 |
---|---|
Cache-Control | 캐싱 동작 지정 |
Connection | Hop-by-hop 헤더, 커넥션 관리 |
Data | 메시지 생성 날짜 |
Pragma | 메시지 제어 |
Trailer | 메시지의 끝에 있는 헤더의 일람 |
Transfer-Encoding | 메시지 바디의 전송 코딩 형식 지정 |
Upgrade | 다른 프로토콜에 업그레이드 |
Via | 프록시 서버에 관한 정보 |
Warning | 에러 통지 |
- 리퀘스트 헤더 필드
헤더 필드 명 | 설명 |
---|---|
Accept | 유저 에이전트가 처리 가능한 미디어 타입 |
Aceept-Charset | Charset 우선 순위 |
Accept-Encoding | 컨텐츠 인코딩 우선 순위 |
Accept-Language | 언어 우선 순위 |
Authorization | 웹 인증을 위한 정보 |
Expect | 서버에 대한 특정 동작의 기대 |
From | 유저의 메일 주소 |
Host | 요구된 리소스의 호스트 |
If-Match | 엔티티 태그의 비교 |
If-Modified-Since | 리소스의 갱신 시간 비교 |
If-None-Match | 엔티티 태그의 비교(If-Match의 반대) |
If-Range | 리소스가 갱신되지 않은 경우에 엔티티의 바이트 범위의 요구를 송신 |
If-Unmodified-Since | 리소스의 갱신 시간 비교(If-Modified-Since의 반대) |
Proxy-Authorization | 프록시 서버의 클라이언트 인증을 위한 정보 |
Range | 엔티티 바이트 범위 요구 |
Referer | 리퀘스트중의 URI를 취득하는 곳 |
TE | 전송 인코딩의 우선 순위 |
User-Agent | HTTP 클라이언트의 정보 |
- 리스폰스 헤더 필드
헤더 필드 명 | 설명 |
---|---|
Accept-Ranges | 바이트 단위의 요구를 수신할 수 있는지 없는지 여부 |
Age | 리소스의 지정 경과 시간 |
Etag | 리소스 특정하기 위한 정보 |
Location | 클라이언트를 지정한 URI에 리다이렉트 |
Proxy-Authenticate | 프록시 서버의 클라이언트 인증을 위한 정보 |
Retry-After | 리퀘스트 재시행의 타이밍 요구 |
Server | HTTP 서버 정보 |
Vary | 프록시 서버에 대한 캐시 관리 정보 |
WWW-Authenticate | 서버의 클라이언트 인증을 위한 정보 |
- 엔티티 헤더 필드
헤더 필드 명 | 설명 |
---|---|
Allow | 리소스가 제공하는 HTTP 메소드 |
Content-Encdoing | 엔티티 바디에 적용되는 컨텐츠 인코딩 |
Content-Language | 엔티티 언어 |
Content-Length | 엔티티 바디 사이즈 |
Content-Location | 리소스에 대응하는 대체 URI |
Content-MD5 | 엔티티 바디의 메시지 다이제스트 |
Content-Range | 엔티티 바디의 범위 위치 |
Content-Type | 엔티티 바디 미디어 타입 |
Expires | 엔티티 바디 유효기간 날짜 |
Last-Modified | 리소스의 최종 갱신 날짜 |
비표준 헤더 필드는 RFC4229 - HTTP Header Field Registrations에 정리되어 있다.
일반 헤더 필드
Request, Response 양쪽에서 사용되는 헤더다.
- Cache-control
- 디렉티브로 불리는 명령을 사용하여 캐싱 동작을 지정한다.
- Connection
- 프록시에 더 이상 전송하지 않는 헤더 필드를 지정
- 지속적 접속 관리
- Date
- HTTP 메시지를 생성한 날짜를 나타낸다.
- RFC1123에 나와 있는 날짜 포맷은 Date: Sun, 25 Aug 2019 21:05:05 GMT
- Pragma
- HTTP/1.1 보다 오래된 버전의 흔적으로 HTTP/1.0 후방 호환성만을 위해서 정의되어 있는 헤더 필드이다.
- Trailer
- 메시지 바디의 뒤에 기술되어 있는 헤더 필드를 미리 전달할 수 있다. 이 헤더 필드는 HTTP/1.1에 구현되어 있는 청크 전송 인코딩을 사용하고 있는 경우에 사용 가능하다.
- Transfer-Encoding
- 메시지 바디의 전송 코딩 형식을 지정하는 경우에 사용된다.
- Upgrade
- HTTP 및 다른 프로토콜의 새로운 버전이 통신에 이용되는 경우에 사용된다.
- Via
- 클라이언트와 서버 간의 Request or Response 메시지의 경로를 알기 위해서 사용된다.
- 프록시 혹은 게이트 웨이는 자신의 서버 정보를 Via 헤더 필드에 추가한 뒤에 메시지를 전송한다.
- 각각의 프록시 서버가 자기 자신의 정보를 Via 헤더에 추가한다.
- Warning
- 캐시에 관한 문제의 경고를 유저에 전달한다.
Warning: [경고 코드][경고한 호스트:포트 번호]"[경고문]" ([날짜])
Upgrade Field
Request
GET /index HTTP/1.1
Upgrade: TLS/1.0
Connection: Upgrade
Response
HTTP/1.1 101 Switching Protocols
Upgrade: TLS/1.0, HTTP/1.1
Connection: Upgrade
Request Header
- Accept
- 처리할 수 있는 미디어 타입과 미디어 타입의 상대적인 우선 순위를 전달한다.
- Accept-Charset
- 처리할 수 있는 문자셋을 전달한다.
- 한번에 여러개 지정할 수 있다.
- Accept-Encoding
- 처리할 수 있는 컨텐츠 인코딩 타입을 전달한다.
- gzip, compress, deflate, identity
- Accept-Language
- 처리할 수 있는 자연어 세트와 우선 순위를 전달한다.
- Authorization
- 유저의 인증 정보를 전달한다.
- Expect
- 클라이언트가 서버에 특정 동작 요구를 전달한다.
- From
- 사용하고 있는 유저의 메일 주소를 전달한다.
- Host (HTTP/1.1 필수 헤더)
- Request한 리소스의 인터넷 호스트와 포트 번호를 전달한다.
- If-Match
- 조건부 리퀘스트
- Etag의 값과 일치하면 리퀘스트를 받을 수 있다.
- 일치하지 않으면 412 Precondition Failed를 반환한다.
- If-Modified-Since
- 리소스가 갱신된 날짜에 따라 리퀘스트를 받는다.
- 실패하면 304 Not Modified를 반환한다.
- If-None-Match
- If-Match와 반대로 동작
- If-Range
- If-Match처럼 Etag와 비교하고 일치하면 Range Request를 한다.
- 일치하지 않으면 전체 Resource를 반환한다.
- If-Unmodified-Since
- If-Modified-Since와 반대로 동작
- Max-Forwards
- 최대로 전송할 수 있는 서버의 수를 나타낸다.
- Proxy-Authorization
- 프록시 서버에서의 인증 요구를 받아들인 때에 인증이 필요한 클라이언트의 정보를 전달한다.
- Range
- 리소스의 일부분만 요청할 수 있다.
- 206 Partial Content를 반환한다.
- Referer (영어 철자는 Referrer가 맞다.)
- 리퀘스트가 발생한 본래 리소스의 URI를 전달한다.
- TE
- 리스폰스로 받을 수 있는 전송 코딩의 형식과 상대적인 우선순위를 전달한다.
- Accept-Encdoing과 비슷하지만, 전송 코딩에 적용된다.
- User-Agent
- 리퀘스트를 생성한 브라우저와 유저의 이름 등을 전달한다.
Response Header
- Accept-Ranges
- Range Request를 받을 수 있는지 여부를 전달
- Age
- 얼마나 오래전에 오리진 서버에서 리스폰스가 생성되었는지 전달
- ETag
- 리소스를 특정하기 위한 문자열을 전달
- 약한 ETag는 앞에 W/가 붙는다.
- Location
- Request URI 외에 다른 리소스 엑세스를 유도하는 경우에 사용된다.
- 보통 Redirection의 URI 처리
- Proxy-Authenticate
- 프록시 서버에서의 인증 요구를 클라이언트에 전달한다.
- Retry-After
- 일정 시간 후에 리퀘스트를 다시 해야하는 것을 전달
- Server
- 서버에 설치되어 잇는 HTTP 서버의 소프트웨어를 전달한다.
- Vary
- 캐시 컨트롤을 위해 사용
- 오리진 서버가 프록시 서버에 로컬 캐시를 사용하는 방법에 대한 지시를 전달한다.
- WWW-Authenticate
- HTTP 액세스 인증에 사용된다.
Entity Header
- Allow
- 리소스가 제공하는 메소드들
- Content-Encoding
- 서버가 엔티티 바디에 대해서 인코딩한 컨텐츠 인코딩 방식을 전달
- Content-Language
- 엔티티 바디에 적용된 언어를 전달
- Content-Length
- 리소스의 크기를 전달
- Content-Location
- 메시지 바디의 URI를 전달
- Content-MD5
- 메시지 바디가 변경되지 않고 도착 했는지 확인하기 위해 MD5 알고리즘에 의해 생성된 값을 전달한다.
- 악의적인 변조는 감지할 수 없다. Content-MD5도 변조해서 보내면 되기 때문
- Content-Range
- Range Request에 대해 응답할 때 사용된다.
- Content-Type
- 엔티티 바디에 포함되는 오브젝트의 미디어 타입을 전달
- Expires
- 리소스의 유효 기한 날짜를 전달
- Last-Modified
- 리소스가 마지막으로 갱신 되었던 날짜를 전달
쿠키를 위한 헤더 필드
가장 널리 사용되고 있는 쿠키 사양은 넷스케이프사에 의한 사양을 근간으로 확장한 것이다.
- Set-Cookie: 상태 관리 개시를 위한 쿠키 정보 (Response)
- Cookie: 서버에서 수신한 쿠키 정보 (Request)
Set-Cookie
필드 속성 | 설명 |
---|---|
NAME=VALUE | 쿠키에 부여된 이름과 값(필수) |
Expires=DATE | 쿠키 유효 기한 |
Path=PATH | 쿠키 적용 대상이 되는 서버 상의 디렉토리 |
Domain=도메인 명 | 쿠키 적용 대상이 되는 도메인 명 |
Secure | HTTPS로 통신하는 경우에만 쿠키를 송신 |
HttpOnly | 쿠키를 자바스크립트에서 액세스 하지 못하도록 제한, 크로스 사이트 스크립팅으로부터 쿠키의 도청을 막는 것을 목적으로 함 |
Cookie
클라이언트가 HTTP의 상태 관리 지원을 원할 때 서버로부터 수신한 쿠키를 이후의 리퀘스트에 포함해서 전달한다.
참고자료: 그림으로 배우는 HTTP & Network Basic, RFC2616
댓글남기기