S E P H ' S

[Network] 5. HTTP 헤더 본문

CS/Network

[Network] 5. HTTP 헤더

yoseph0310 2023. 6. 11. 17:22

HTTP 헤더

header-field = field-name":"OWS field-value OWS
  • HTTP 전송에 필요한 모든 부가정보를 담는 용도로 사용된다.
  • 스펙에 정의된 헤더 뿐 아니라 임의의 헤더 추가도 가능하다.

 

표현(Representation)

  • 과거 RFC2616 스펙에서는 엔티티 헤더, 엔티티 본문 등으로 불리던 HTTP 헤더와 바디는 2014년부터 개정된 RFC2730 ~ 7235 부터는 표현(Representation) 이라는 용어로 불리게 되었다.
  • HTTP 헤더는 표현 헤더, HTTP Message Body는 표현 데이터라 부른다.

 

표현 헤더

전송, 응답 양측에서 사용이 가능한 정보로 서버/클라이언트 간에 송/수신할 때 해당 정보로 무엇을 어떻게 표현할지에 대해 알려주고 표현한다. 이는 표현 헤더보다는 Payload 헤더라 부르는게 더 명확하지만 그냥 표현 헤더라고 해도 무방하다.

 

Content-Type

표현 데이터의 형식 정보를 설명한다.

  • text/html;charset=utf8, aplication/json, image/png ...
  • 클라이언트(웹 브라우저)는 이 Content-Type을 보고 표현 데이터를 적절히 렌더링한다.

Content-Encoding

표현데이터의 인코딩을 설명한다.

  • gzip, deflate, identity
  • 서버 및 클라이언트 양측에서 사용할 수 있는 정보다.
  • 데이터를 받는 측에서는 해당 정보를 보고 압축을 해제하여 데이터를 읽는다.
  • 데이터를 전달하는 측에서는 해당 데이터를 압축 후 압축 형식을 헤더에 추가한다.

Content-Language

표현 데이터의 자연 언어를 설명한다.

  • ko, en, en-US, de, ...
  • 서버측에서 지원을 한다는 가정하에 해당 언어로 응답을 받을 수 있다.

Content-Length

표현 데이터의 길이를 설명한다.

  • 바이트 단위이다.
  • Transfer-Encoding(전송 코딩)을 사용하면 내부에 Content-Length 정보도 포함되어 있기에 헤더 필드를 사용하면 안된다.

 

콘텐츠 협상

클라이언트에서 선호하는 표현에 대해 작성하여 서버에게 전달을 할 수가 있는데, 이 정보들을 토대로 서버측에서는 우선순위에 맞춰 지원이 가능한 범위까지 표현 데이터를 만들어 클라이언트에게 제공하도록 하는 정보이다.

 

Accept-Language

클라이언트에서 우선적으로 선호하는 자연 언어에 대한 정보를 담는다. 서버측에서는 다국어를 지원한다는 가정하에 해당 정보를 읽고 우선순위대로 지원 여부에 따라 가장 높은 우선순위의 언어로 표현데이터를 작성해 응답한다.

 

우선순위

콘텐츠 협상이라는 말 그대로 클라이언트는 자신이 요구하는 언어나 포맷등이 하나로 단일적이지 않고 우선순위에 따라 데이터를 요청할 수 있는데 이런 우선순위를 작성하는 방식은 어떻게 될까?

  • q(quality) 필드 사용
    • Accept-Language: ko-KR,ko;q=0.9, en-US;q=0.8, en;q=0,7
    • 0~1 사이의 값을 q의 값으로 작성하며 1과 가까울 수록 우선순위가 높다.
    • 우선 순위가 1인 경우 해당 정보는 생략 가능
  • 정보의 구체화
    • 정보를 구체적으로 작성할 수록 우선순위는 높아진다.
    • Accept: text/*, text/plain, text/plain;format=flowed, */*
      1. text/plain;format=flowed
      2. text/plain
      3. text/*
      4. */*

 

일반 정보

  • Referer : 이전 웹 페이지 주소로 요청에서 사용하며 유입경로 분석등에 사용한다.
  • User-Agent : 클라이언트의 애플리케이션 정보로 클라이언트 장비 혹은 웹 브라우저등의 정보를 의미하며 요청에서 사용한다.
  • Server : 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보를 의미한다. 응답에서 사용한다.
  • Date : 메세지가 발생한 날짜와 시간 정보이며 예전에는 요청과 응답 모두 사용되었지만 현재는 응답에서만 사용한다.

 

특별한 정보

HOST

  • 요청한 호스트(도메인) 정보를 의미.
  • 요청에서 사용
  • 필수 헤더
  • 하나의 서버에서 여러 도메인을 가상 호스팅하거나, 하나의 IP 주소에 여러 도메인이 적용되어 있을때 필수적으로 필요한 정보

Location

  • 응답에서 사용.
  • 페이지 리다이렉션에 사용되는 정보
  • 웹 브라우저에서 3XX 응답에 해당 정보가 있을 경우 자동 리다이렉션 한다.
  • 201(Created)응답에서 Location은 리소스 생성 요청에 의해 생성된 리소스 식별자 URI이다.

Allow

  • 해당 경로로 허용 가능한 HTTP 메소드 정보
  • /members 라는 경로가 GET, POST, DELETE만 제공한다고 할 때 PATCH로 요청을 부낼 경우 다음과 같이 응답메시지가 구성된다.
    • 405(Method Not Allowed)
    • Allow : GET, POST, DELETE

Retry-After

  • User-Agent가 다음 요청을 하기까지 기다려야 하는 시간
  • 언제 요청을 받을 수 있을지 유추하기 힘들기 때문에 사용하기가 쉽지 않다.
  • 503(Service Unavailable) 서비스가 언제까지 불가능한지 알려줄 수 있다.
  • Retry-After: Fri, 31 Dec 1999 23:59:59 GMT(날짜 표기)
  • Retry-After: 120(초단위 표기)

 

 

인증

Authorization

  • 클라이언트 인증 정보를 서버에 전달한다.
  • Authorization: Bearer xxx~~~~
  • 인증 방식에 따라 전달해야 하는 값이 다르다.

WWW-Authentication

  • 리소스 접근시 필요한 인증방법 정보
  • 401 Unauthorized 상태코드와 함께 전달됨.
WWW-Authentication: Newauth realm="apps", 
                    type=1,
                    title="Login to \"apps\"", 
                    Basic realm="simple"