✊ 필오의 개발일지
Back to Posts
2019년 8월 18일

HTTP 메세지 - 헤더

HTTP 메세지 - 헤더

해당 링크 를 기준으로 standard 중 일부만 정리하였다. 책에서 더 이상 쓰지 않는 헤더는 취소선 처리하였다.


메세지 헤더

헤더에는 👆 특정 종류의 메세지에만 사용할 수 있는 헤더와, 🤚 더 일반 목적으로 사용할 수 있는 헤더, 👐 그리고 응답과 요청 메세지 양쪽 모두에서 정보를 제공하는 헤더가 있다.

  1. 일반 헤더
  1. 요청 헤더
  1. 응답 헤더
  1. 엔터티 헤더


Header (HTTP/1.1 기준)

1. 일반 헤더 General headers

일반 정보헤더

Connection: keep-alive Date: Wed, 21 Oct 2015 07:28:00 GMT Transfer-Encoding: gzip, chunked Via: HTTP/1.1 GWA

일반 캐시 헤더

Cache-Control: public, max-age=31536000 Pragma: no-cache

최신 버전의 HTTP는 매우 풍부한 캐시 매개변수의 집합을 가지고 있다.

2. 요청 헤더

요청 메세지에서만 의미를 갖는 헤더다.

요청 정보 헤더

From: webmaster@example.org Host: developer.cdn.mozilla.net Referer: https://developer.mozilla.org/en-US/docs/Web/JavaScript User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0

Accept 관련 헤더

Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8 Accept-Charset: utf-8, iso-8859-1;q=0.5, *;q=0.1 Accept-Encoding: gzip, compress, br Accept-Language: de-CH TE: gzip

클라는 Accept 헤더들을 이용해 서버에게 자신의 선호와 능력을 알려줄 수 있다. 서버는 클라가 사용할 수도 없는 것을 전송하는데 시간과 대역폭을 낭비하지 않을 수 있다.

조건부 요청 헤더

Expect: 100-continue If-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d" If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d" If-Range: Wed, 21 Oct 2015 07:28:00 GMT If-Unmodified-Since: Wed, 21 Oct 2015 07:28:00 GMT Range: bytes=0-499, -500

클라는 요청에 몇몇 제약을 넣기도 한다. 클라는 서버에게 요청에 응답하기 전에 먼저 조건이 참인지 확인하게 하는 제약을 포함시킬 수 있다.

요청 보안 헤더

Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l Cookie: PHPSESSID=298zf09hf012fh2; csrftoken=u32t4o3tb3gg43; _gat=1;

HTTP는 자체적으로 요청을 위한 간단한 인증요구/응답 체계를 갖고 있다. 요청하는 클라가 어느 정도의 리소스에 접근하기 전에 자신을 인증하게 함으로써, 트랜잭션을 약간 더 안전하게 만들고자 한다.

프락시 요청 헤더

Proxy-Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l

3. 응답 헤더

응답 메세지는 그들만의 응답 헤더를 갖는다. 응답 헤더는 클라에게 부가 정보를 제공한다.

응답 정보 헤더

Age: 24 Retry-After: Wed, 21 Oct 2015 07:28:00 GMT Server: Apache/2.4.1 (Unix) Warning: 112 - "cache down" "Wed, 21 Oct 2015 07:28:00 GMT"

협상 헤더

Accept-Ranges: bytes Vary: User-Agent

서버에 프랑스어나 독일어로 번역된 HTML 문서가 있는 경우와 같이 여러 가지 표현이 가능한 상황이라면, HTTP/1.1은 서버와 클라가 어떤 표현을 택할 것인가에 대한 협상을 할 수 있도록 지원한다.

응답 보안 헤더

Proxy-Authenticate: Basic realm="Access to the internal site" Set-Cookie: sessionid=38afes7a8; HttpOnly; Path=/ WWW-Authenticate: Basic

기본적인 인증 요구 헤더들이다.

4. 엔터티 헤더

엔터티에 대해 설명하는 헤더들은 많다. 요청과 응답 양쪽 모두 엔터티를 포함할 수 있기 때문에, 이 헤더들은 양 타입의 메세지에 모두 나타날 수 있다.

엔터티 정보헤더

Allow: GET, POST, HEAD Location: /index.html

LocationContent-Location는 다릅니다: Location가 리다이렉션의 대상(혹은 새롭게 만들어진 문서의 URL)을 가르키는데 반해, Content-Location은 더 이상의 컨텐츠 협상없이, 리소스 접근에 필요한 직접적인 URL을 가르킵니다. Location은 응답과 연관된 헤더인데 반해, Content-Location 은 반환된 개체와 연관이 있습니다. 출처 mdn 

콘텐츠 헤더

Content-Encoding: gzip Content-Language: de-DE Content-Location: /my-first-blog-post Content-Range: bytes 200-1000/67589 Content-Type: text/html; charset=utf-8 Content-Disposition: form-data; name="myFile"; filename="foo.txt"

엔터티의 콘텐츠에 대한 구체적인 정보를 제공한다. 콘텐츠의 종류, 크기, 기타 콘텐츠를 처리할 때 유용하게 활용될 수 있는 것들이다. 웹브라우저는 내용 유형을 기술한 Content-Type 헤더를 보고 그 객체를 어떻게 보여줄지 결정할 수 있다.

엔터티 캐싱 헤더

ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4" Expires: Wed, 21 Oct 2015 07:28:00 GMT Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT

일반 캐싱 헤더는 언제 어떻게 캐시가 되어야 하는지에 대한 지시자를 제공한다. 엔터티 캐싱 헤더는 엔터티 캐싱에 대한 정보를 제공한다.




참고자료

  1. IANA registry 
  2. MDN 
Previous커넥션 관리 - TCP 커넥션과 성능
NextHTTP 메세지 - 상태코드

Related

© 2025 Felix