당신은 HTTP를 얼마나 아는가? 5편 - HTTP 헤더

sojukang·2022년 5월 29일
0
post-custom-banner

HTTP 메시지 헤더

HTTP 메시지 헤더는 엔티티에 관한 다양한 종류의 메타 정보를 가진다.

HTTP 헤더 필드

구조

헤더 필드 명과 필드 값으로 구성되며 콜론(:)으로 구분된다. 여러 개의 필드 값을 가질 수 있다.
헤더 필드 명 : 필드 값
Keep-Alive:timeout=15,max=100

종류

일반적 헤더 필드

요처으 응답 모두에 사용할 수 있다.

리퀘스트 헤더 필드

요청에 사용하는 헤더. 요청의 부가 정보와 클라이언트 정보, 응답 컨텐츠의 우선 순위 등

리스폰스 헤더 필드

응답에 사용하는 헤더. 응답 정보와 서버 정보, 클라이언트의 추가 정보 요구 등

엔티티 헤더 필드

엔티티에 사용하는 헤더. 컨텐츠 갱신 시간 등 엔티티에 관한 정보 부가

End-to-end 헤더와 Hop-by-hop 헤더

캐시와 비캐시 프록시의 동작을 정의하기 위해 분류한다.

End-to-end 헤더

요청이나 응답의 최종 수신자에게 전송된다. 프록시를 거치며 다시 전송되어 끝까지 도달해야 함.

Hop-by-hop 헤더

한 홉 전송에만 유효. 아예 전송되지 않는 경우도 있다. HTTP/1.1에서는 아래 정의된 8가지만 해당하며 이외에는 전부 End-to-end 헤더이다.

  • Connection
  • Keep-Alive
  • Porxy-Authenticate
  • Proxy-Authorization
  • Trailer
  • TE
  • Transfer-Encoding
  • Upgrade

HTTP/1.1 일반 헤더 필드

Cache-Control

디렉티브(Directive)로 불리는 명령을 사용하여 캐싱 동작 지정
디렉티브의 파라미터는 선택이며 여러 개의 디렉티브를 지정할 때는 콤마,로 지정한다.
Cache-Control: private, max-age=0, no-cache

캐시가 가능한지 여부를 나타냄

  • public
    • Cache-control: public
    • 다른 유저에게도 돌려줄 수 있는 캐시를 해도 좋은 경우
  • privare
    • Cache-control: private
    • 특정 유저만을 대상으로 한다. 다른 유저가 해당 리소스에 접근하면 캐시를 반환하지 않는다.
  • no-cache
    • Cache-control: no-cache
    • 클라이언트: 중간 캐시 서버가 오리진 서버까지 요청 전송.
    • 서버: 캐시 서버는 리소스를 저장할 수 없다.
    • 헤더 필드 명 지정: 해당 헤더 필드만 캐시할 수 없음.

캐시로 보존 가능한 것 제어

  • no-store
    • Cache-control: no-cache
    • 요청, 응답을 로컬 스토리지에 보존하지 않는다.

캐시 기한이나 검증을 지정

  • max-age
    • Cache-control: max-age=604800 (sec)
    • 캐시 서버가 유효성 확인하지 않고 리소스를 캐시에 보존해 두는 최대 시간 지정
  • must-revalidate
    • Cache-control: must-revalidate
    • 응답의 캐시가 현재도 유효한지 오리진 서버에 반드시 조회 요구.

Connection

프록시에 더 이상 전송하지 않는 헤더 필드 지정

Connection: 더 이상 전송하지 않는 헤더 필드 명
프록시에 더 이상 전송하지 않을 헤더 필드 지정(Hop-by-hop)

지속적 접속 관리

Connection: Close
HTTP/1.1에서는 지속 접속이 기본이다. 명시적으로 접속을 끊고 싶을 경우 사용한다.

Transfer-Encoding

메시지 바디의 전송 코딩 형식을 지정하지만 스펙상 청크 전송만이 지정되어있다.
Transfer-Encoding: chunked

Via

클라이언트와 서버 간 HTTP 전송 경로를 알기 위해 사용한다. 프록시 혹은 게이트웨이는 자신의 서버 정보를 Via 헤더 필드에 추가한 뒤 메시지를 전송한다.
Via: someProxyInfo, anotherProxyInfo

리퀘스트 헤더 필드

Accept

요청한 쪽이 처리할 수 있는 미디어 타입과 상대적인 우선순위를 전달하기 위해 사용한다.

Accept-Charset

Accept-Charset:iso-885905, unicode-1-1:q+0.8
요청한 쪽이 처리할 수 있는 문자셋으로, 상대적인 우선순위를 전달하기 위해 사용. 서버 구동형 네고시에이션에 사용된다.

Accept-Encoding

요청한 쪽이 처리할 수 있는 컨텐츠 코딩과 상대적인 우선순위를 전달하기 위해 사용.
Accept-Encoding: gzip, deflate
종류는 다음과 같다.

  • gzip
  • compress
  • deflate
  • identity

Accept-Language

요청한 쪽이 처리할 수 있는 언어와 상대적인 우선순위를 전달하기 위해 사용.
Accept-Language: ko-kr, en-us;q=0.7, en;q=0.3

Authorization

요청한 쪽의 인증 정보를 전달하기 위해 사용된다. 서버에서 401 Unauthorized 응답을 받은 경우 인증 정보를 포함하여 다시 전송한다.
Authorization: Bearer XXX...

Host

가상 호스트 서비스를 위해 반드시 필요하다. 1대의 서버에서 복수의 도메인을 할당하게 하기 위해 인터넷 호스트와 포드 번호를 전달하여 특정한다.
Host: www.naver.com

엔티티 헤더 필드

Allow

요청 URI에 지정된 리소스가 제공하는 메소드의 목록을 제공한다.
Allow: GET, POST

Content

Content-Encoding

서버가 엔티티 바디에 사용한 컨텐츠 코딩 형식 전달.
Content-Encoding: gzip

Content-Language

엔티티 바디에 사용된 언어 전달.
Content-Language: ko

Content-Length

엔티티 바디의 크기(bytes) 전달. 전송 코딩이 적용된 경우 사용하지 않음.
Content-Length: 15000

Content-Location

메시지 바디에 대응하는 URI 전달.
Content-Location: http://www.naver.com/peper

Content-Range

Range-request에 관해 엔티티가 어느 부분인가 전달.
Content-Range: bytes 5001-10000/10000

Content-Type

엔티티 바디에 담긴 객체의 미디어 타입을 전달.
Content-Type: test/html; charset=UTF-8

Last-Modified

리소스가 마지막으로 갱신된 날짜 전달.
Last-Modified: Wed, 23 May 2022 05:06:10 GMT

쿠키를 위한 헤더 필드

Expires

브라우저가 쿠키를 보낼 수 있는 유효 기간 지정. 생략한 경우 브라우저 세션이 유지된 동안만 유효하다. 브라우저가 보낸 쿠키를 서버측에서 삭제하지는 않으며, 덮어 씌우는 것으로 간접적으로 삭제한다.
expires=Wed, 23 May 2022 05:06:10 GMT

Secure

HTTPS 보안 통신을 할 경우에만 쿠키를 전달하도록 하기 위해 지정.
Set-CookieL name=value; secure

HttpOnly

JS 를 경유해서 쿠키를 취득하지 못하도록 하는 쿠키의 확장 기능. XSS(Cross Site Scripting)에서 쿠키 도청을 막기 위한 목적.
Set-Cookie: name=value; HttpOnly

참고

우에노 센, 이병억 역, 그림으로 배우는 HTTP Network Basic, 영진 닷컴

profile
기계공학과 개발어린이
post-custom-banner

0개의 댓글