HTTP Header란?
HTTP 프로토콜을 사용하여 웹 클라이언트와 서버간의 통신에서 요청과 응답 본문 외에 해당 요청/응답의 메타 정보를 포함하는 정보입니다.
각 필드는 key/value 형태로 이루어져 있으며 요청과 응답을 처리하는 데 중요한 역할을 합니다.
사용자 지정 전용 헤더는 'X-' 접두사와 함께 사용되어 왔지만 RFC6648 에서 비표준 필드가 표준이 되었을 때의 발생한 불편함 때문에 2012년 6월에 더 이상 사용하지 않게 됩니다.
각 브라우저와 웹 서버는 몇KB 정도로 헤더를 제한하고 있으며 이를 초과할 시 '413 Entity Too Large'가 반환되게 됩니다.
HTTP/2, HTTP/3과 같은 프로토콜은 헤더 압축 및 다중화를 통해 이러한 제약을 완화시키기 위한 방법을 제공합니다.
Http Header 구조
GET /path/to/resource HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8
Request Header Field (표준)
필드명 | 설명 | 예시 |
---|---|---|
Accept | 허용 가능 응답 데이터 유형 | Accept: text/html |
Accept-Charset | 허용 가능 문자 집합 | Accept-Charset: utf-8 |
Accept-Datetime | 허용 가능 시간 정보. 원본 데이터의 과거 시간에 접근할 것임을 나타냄. | Accept-Datetime: Thu, 31 May 2007 20:35:00 GMT |
Accept-Encoding | 허용 가능 인코딩 목록 | Accept-Encoding: gzip, deflate |
Accept-Language | 허용 가능 언어 | Accept-Language: en-US |
Accept-Control-Request-Method | CORS 요청 메소드 | Access-Control-Request-Method: GET |
Authorization | HTTP 인증 자격 증명 | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Cache-Control | 요청,응답 체인을 따라 모든 캐싱 메커니즘이 준수해야하는 지시사항 | Cache-Control: no-cache |
Content-Encoding | 본문 데이터 인코딩 유형 | Content-Encoding: gzip |
Content-Length | 요청 본문 길이(Byte) | Content-Length: 348 |
Content-Type | 요청 본문 데이터 유형(POST,PUT) | Content-Type: application/x-www-form-urlencoded |
Cookie | 서버가 설정한 쿠키 목록 | Cookie: $Version=1; Skin=new; |
Date | 메세지 시작 날짜 및 시간 | Date: Tue, 15 Nov 1994 08:12:31 GMT |
Forwarded | HTTP 프록시를 통해 웹서버 연결할 때 클라이언트의 원래 정보 | Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43 Forwarded: for=192.0.2.43, for=198.51.100.17 |
From | 요청자 전자 메일 주소 | From: user@example.com |
Host | 서버의 도메인 및 TCP 포트 번호. 표준 포트일 경우 생략 가능 | Host: en.wikipedia.org:8080 |
If-Modified-Since | 내용이 수정되지 않은 경우 '304 Not Modified' 허용 | If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT |
If-None-Match | 일치하지 않은 경우 '304 Not Modified' 허용 | If-None-Match: "737060cd8c284d8af7ad3082f209582d" |
Origin | CORS 공유 요청 | Origin: http://www.example-social-network.com |
Pragma | 요청,응답 체인을 따라 다양한 영향을 미칠 수 있는 필드. HTTP/1.1 버전의 Cache-Control 헤더가 생기기 전 그것과 동일한 역할을 하는 대용 헤더로 사용 | Prefer: return=representation |
Proxy-Authorization | 프록시 연결 인증 자격 증명 | Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Range | 엔티티의 일부 Byte만 요청 | Range: bytes=500-999 |
Referer | 요청한 사이트의 이전 링크 | Referer: http://en.wikipedia.org/wiki/Main_Page |
User-Agent | 사용자 에이전트 | User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0 |
Upgrade | 서버에 다른 프로토콜로 업그레이드 하도록 요청 | Upgrade: h2c, HTTPS/1.3, IRC/6.9, RTA/x11, websocket |
필드명 | 설명 | 예시 |
---|---|---|
Age | 엔티티가 프록시 캐시에 있던 기간(초) | Age: 12 |
Allow | 지정한 리소스에 유효한 메서드 | Allow: GET, HEAD |
Content-Disposition | 이진 형식의 MIME 유형에 대해 '파일 다운로드' 대화상자를 열거나 동적 내용에 대한 피일 이름을 제안 | Content-Disposition: attachment; filename="fname.ext" |
Content-Location | 반환된 데이터의 대체 위치 | Content-Location: /index.htm |
ETAG | 리소스의 특정 버전에 대한 식별자 | ETag: "737060cd8c284d8af7ad3082f209582d" |
Expires | 응답이 오래된 것으로 간주되는 시간 정보 제공 | Expires: Thu, 01 Dec 1994 16:00:00 GMT |
Last-Modified | 요청된 개체의 마지막 수정 날짜 | Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT |
Link | 다른 리소스와 유형화된 관계를 표현 | Link: ; rel="alternate" |
Location | 리디렉션 또는 새 리소스가 생성된 경우 사용 | Location: http://www.w3.org/pub/WWW/People.html |
Public-Key-Pins | HTTP 공개키 피닝.웹사이트 인증 TLS 인증서 해시 발표 | Public-Key-Pins: max-age=2592000; pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g="; |
Retry-After | 엔티티를 일시적으로 사용할 수 없는 경우 클라이언트가 나중에 다시 시도하도록 지시. | Retry-After: Fri, 07 Nov 2014 23:59:59 GMT |
Server | 서버 이름 | Server: Apache/2.4.1 (Unix) |
Set-Cookie | HTTP 쿠키 목록 | Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1 |
Warning | 엔티티 본문에서 발생할 수 있는 문제에 대한 일반적인 경고 | Warning: 199 Miscellaneous warning |
WWW-Authenticate | 요청된 엔티티에 액세스하는데 사용할 인증 체계 | WWW-Authenticate: Basic |