솜이의 데브로그

6장 ) HTTP/1.1 일반 헤더 필드, 리퀘스트 헤더 필드 본문

CS/Network

6장 ) HTTP/1.1 일반 헤더 필드, 리퀘스트 헤더 필드

somsoming 2021. 10. 15. 21:14

Reference : 그림으로 배우는 Http & Network Basic

 

6.3 HTTP/1.1 일반 헤더 필드

일반 헤더필드는 리퀘스트 메시지와 리스폰스 메시지 양쪽에서 사용되는 헤더이다.

 

Cache-Control

  • 디렉티브로 불리는 명령을 사용하여 캐싱 동작을 지정한다.
    • 여러개의 디렉티브를 지정하는 경우에는 콤마 ","로 구분한다.
      • ex)
        Cache-Control : private, max-age=0, no-cache​
캐시가 가능한지 여부를 나타내는 디렉티브
  • public 디렉티브 : 다른 유저에게도 돌려줄 수 있는 캐시를 해도 좋다는 것을 명시적으로 나타낸다.
  • private 디렉티브 : 리스폰스는 특정 유저만을 대상으로 하고 있음을 나타낸다.
  • no-cache 디렉티브 : 캐시로부터 오래된 리소스가 반환되는 것을 막기 위해 사용.
    • 클라이언트 리퀘스트에서 사용한 경우 : 중간 캐시 서버가 오리진 서버까지 리퀘스트를 전송해야함
    • 서버의 리스폰스에서 사용한 경우 : 오리진 서버는 캐시 서버가 이후의 리퀘스트에서 리소스의 유효성을 반드시 재확인하도록 함.
    • Cache-Control: no-cache=Location
    • 리스폰스로 no-cache의 필드값에 헤더 필드명이 지정된 경우 이 지정된 헤더필드만 캐시할 수 없다.

 

캐시로 보존 가능한 것을 제어하는 디렉티브
  • no-store 디렉티브 : 리퀘스트 혹은 리스폰스에 기밀 정보가 포함되어 있음을 나타낸다.

 

 

캐시 기한이나 검증을 지정하는 디렉티브
  • s-maxage 디렉티브 : max-age 디렉티브와 기능이 동일하며, 여러 유저가 이용할 수 있는 공유 캐시 서버에만 적용. s-maxage 디렉티브가 사용되는 경우 Expires 헤더 필드와 max-age 디렉티브는 무시된다.
  • max-age 디렉티브
    • 클라이언트의 리퀘스트로 사용된 경우 지정된 값보다 새로운 경우 캐시되었던 리소스를 받아들일 수 있다.
    • 서버의 리스폰스에서 사용된 경우, 캐시 서버가 유효성의 재확인을 하지 않고 리소스를 캐시에 보존해두는 최대 시간을 나타낸다.
    • HTTP/1.1 캐시 서버는 동시에 Expires 헤더 필드가 달린 경우 max-age 디렉티브의 지정을 우선하고 Expires 헤더필드를 무시한다. (1.0은 반대)
  • min-fresh 디렉티브 : 캐시된 리소스가 적어도 지정된 시간은 최신 상태의 것을 반환하도록 캐시서버에 요구.

 

  • max-stale 디렉티브 : 캐시된 리소스의 유효기간이 끝났더라도 받아들일 수 있음을 나타낸다.
  • only-if-cached : 클라이언트는 캐시 서버에 대해서 목적한 리소스가 로컬 캐시에 있는 경우만 리스폰스를 반환.
    → 응답할 수 없는 경우 "504 Gateway Timeout" 상태 반환
  • must-revalidate : 리스폰스의 캐시가 현재도 유효한지 여부를 오리진 서버에 조회를 요구.
  • proxy-revalidate : 모든 캐시 서버에 대해서 이후의 리퀘스트로 해당 리스폰스를 반환할 때 반드시 유효성 재확인을 하도록 요구.
  • no-transform : 리퀘스트와 리스폰스 모두 캐시가 엔티티 바디의 미디어 타입을 변경하지 않도록 지정.

 

Cache-Control 확장
  • cache-extension 토큰 : 디렉티브 확장 가능.

 

 

Connection

Connection 헤더 필드는 두가지 역할을 한다.

  • 프록시에 더 이상 전송하지 않는 헤더 필드를 지정
  • 지속적 접속 관리

HTTP/1.1에서는 지속적 접속이 디폴트로 되어있다. 따라서 서버 측에서 명시적으로 접속을 끊고 싶을 경우에는 Connection 헤더필드에 Close 라고 지정한다.

 

 

Date

Date 헤더필드는 HTTP 메시지를 생성한 날짜를 나타낸다.

 

 

Pragma

HTTP/1.9와의 후방 호환성만을 위해 정의되어 있는 헤더 필드.

 

 

Trailer

메시지 바디의 뒤에 기술되어 있는 헤더필드를 미리 전달할 수 있다.

 

Transfer-Encoding

메시지 바디의 전송 코딩 형식을 지정

 

Upgrade

HTTP 및 다른 프로토콜의 새로운 버전이 통신에 이용되는 경우 사용.

 

Via

클라이언트와 서버 간의 리퀘스트 혹은 리스폰스 메시지의 경로를 알기 위해 사용.

프록시 혹은 게이트웨이는 자신의 서버 정보를 Via 헤더필드에 추가한 뒤 메시지를 전송한다.

 

Warning

HTTP/1.0 리스폰스 헤더가 HTTP/1.1에서 변경된 것으로, 리스폰스에 관한 추가 정보를 전달한다.

기본적으로 캐시에 관한 문제의 경고를 유저에 전달한다.

Warning : [경고 코드][경고한 호스트:포트 번호]"[경고문]"([날짜])

 

 

 

6.4 리퀘스트 헤더 필드

리퀘스트 헤더필드는 클라이언트 측에서 서버 측으로 송신된 리퀘스트 메시지에 사용되는 헤더로, 리퀘스트의 부가 정보와 클라이언트의 정보 리보, 리스폰스의 콘텐츠에 관한 우선순위 등을 추가한다.

 

Accept

  • Accept 헤더필드는 유저 에이전트에 처리할 수 있는 미디어 탕비과 미디어 타입의 상대적인 우선순위를 전달한다.
  • 표시하는 미디어 타입에 우선순위를 붙일 경우 세미콜론 ":"으로 구분하고 "q=" 로 표시할 품질 지수를 더한다.
    • 품질 계수는 0~1 범위의 수치

 

Accept-Charset

  • 유저 에이전트에서 처리할 수 있는 문자셋으로, 문자셋의 상대적인 우선순위를 전달하기 위해 사용된다.
  • Accept 헤더 필드와 마찬가지로 품질 지수에 의해 상대적 우선순위를 표시한다.

ex)

Accept-Charset:iso-8859-5, unicode-1-1:q+0.8

 

 

Accept-Encoding

  • 유저 에이전트가 처리할 수 있는 콘텐츠 코딩과 콘텐츠 코딩의 상대적인 우선순위를 전달하기 위해 사용된다.
    • gzip
    • compress
    • deflate
    • identity (압축과 변형은 하지 않는 디폴트 인코딩 포맷)

 

 

Accept-Language

  • 유저 에이전트가 처리할 수 있는 자연어의 세트와 자연어 세트의 상대적인 우선순위를 전달하기 위해 사용.
  • 자연어 세트는 한번에 여러 개를 지정할 수 있다.

 

Authorization

  • 유저 에이전트의 인증 정보(크레덴셜 값)을 전달하기 위해 사용된다.
  • 서버에 인증받으려 하는 유저 에이전트는 상태코드 401 리스폰스 뒤에 리퀘스트에 Authorization 헤더필드를 포함한다.

 

Expect

  • 클라이언트가 서버에 특정 동작 요구를 전달한다.
  • 해당 요구에 서버가 응답하지 못해 에러가 발생하는 경우 상태코드 417 Expectation Failed 를 반환한다.
  • 원하는 확장을 보낼 수 있지만 HTTP/1.1의 사양에서는 "100-continue"만 정의되어 있다.

 

From

  • 유저 에이전트를 사용하고 있는 유저의 메일 주소를 전달한다.
  • 에이전트를 사용하는 경우에는 되도록 From 헤더필드를 포함해야 한다.

 

Host

  • 리퀘스트한 리소스의 인터넷 호스트와 포트 번호를 전달한다.
  • Host 헤더 필드는 HTTP/1.1에서 유일한 필수 헤더 필드이다.
  • 리퀘스트 서버에서 호스트명을 IP주소로 해결해 리퀘스트가 처리되는데, 같은 IP 주소로 복수의 도메인이 적용되어 있을 수 있으므로 리퀘스트를 받은 호스트명을 명확하게 해야한다.

 

If-Match

  • 조건부 리퀘스트라고 부르며, 조건부 리퀘스트를 받은 서버는 지정된 조건에 맞는 경우에만 리퀘스트를 받는다.
  • 서버 상의 리소스를 특정하기 위해 엔티티 태그 값을 전달한다.
  • 서버는 필드 값과 리소스의 ETag 값이 일치한 경우에만 리퀘스트를 받아들이며, 일치하지 않는 경우 412 Precondition Failed 리스폰스를 반환한다.

 

If-Modified-Since

  • 조건부 리퀘스트의 하나로, 리소스의 갱신 날자가 필드값보다 새롭지 않다면 리퀘스트를 받아들이겠다는 뜻을 전한다.

 

If-None-Match

  • 조건부 리퀘스트의 하나로 If-Match 헤더필드와 반대로 동작한다.
  • 필드값에 지정된 엔티티 태그(Etag)의 값이 지정된 리소스의 ETag 값과 일치하지 않으면 리퀘스트를 받아들인다.

 

If-Range

  • 조건부 리퀘스트의 하나로 If-Ragne로 지정한 필드값과 지정한 리소스의 ETag 값 혹은 날짜가 일치하면 Range 리퀘스트로서 처리하고 싶다는 것을 전달한다.

 

If-Unmodified-Since

  • If-Modified-Since 헤더 필드와 반대로 동작.
  • 지정된 리소스가 필드 값에 지정된 날짜 이후에 갱신되어 있지 않는 경우에만 리퀘스트를 받아들인다.

 

Max-Forwards

  • TRACE 혹은 OPTIONS 메소드에 의한 리퀘스트를 할 때에 전송해도 좋은 서버 수의 최대치를 10진수 정수로 지정한다.
  • 서버가 다음 서버에 리퀘스트를 전송할 때 Max-Forwards 값에서 1을 빼고 다시 set한다.
  • Max-Forward 값이 0인 리퀘스트를 받은 경우에는 전송하지 않고 리스폰스를 반환해야한다.

 

Proxy-Authorization

  • 프록시 서버에서의 인증 요구를 받아들인 때에 인증에 필요한 클라이언트의 정보를 전달한다.
  • 클라이언트와 프록시 사이에 인증이 이루어진다.

 

Range

  • 리소스의 일부분만 취득하는 Range 리퀘스트를 할 때 지정 범위를 전달한다.
  • Range 헤더필드가 달린 리퀘스트를 처리하는 경우에는 206 Partial Content 리스폰스를 반환한다.
  • Range 리퀘스트를 처리할 수 없는 경우에는 상태코드 200 OK 리스폰스로 리소스 전체를 반환한다.

 

Referer

  • 리퀘스트가 발생한 본래 리소스의 URI를 전달한다.
  • 브라우저 주소창에 직접 URI를 입력한 경우와 보안상 바람직하지 않다고 판단된 경우에는 보내지 않아도 된다.

 

TE

  • 리스폰스로 받을 수 있는 전송 코딩의 형식과 상대적인 우선순위를 전달한다.

 

User-Agent

  • 리퀘스트를 생성한 브라우저와 유저 에이전트의 이름 등을 전달하기 위한 필드.

 

 

 

 

느낀점

종류가 너무 많다.. 자주 쓰는 것들은 외워두고 그때그때 찾아쓰는거겠지..? 이걸 어떻게 다 외우지

'CS > Network' 카테고리의 다른 글

7장 ) 응용 계층  (0) 2021.10.28
6장 ) 전송 계층  (0) 2021.10.16
5장 ) 네트워크 계층  (0) 2021.10.09
5, 6장 ) 웹 서버, HTTP 헤더(1)  (0) 2021.10.09
4장 ) 결과를 전달하는 HTTP 상태코드  (0) 2021.09.30