본문 바로가기

Infrastructure/Network

[HTTP] 헤더 - 1 (일반 헤더)

HTTP 헤더의 역할 그리고 일반적인 헤더의 종류와 그 역할에 대해서 알아본다.

HTTP 헤더의 역할

  • header-field = field-name":" OWS field-value OWS
  • field-name은 대소문자 구분이 없다.

아래의 요청과 응답 부분에서 진하게 적어놓은 부분이 헤더 부분이다.

요청

GET /car?manufacturer=hyundai?modelName=sonata HTTP/1.1
Host: www.google.com

응답

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423

body...

과거 버전(RFC2616)과 현재 버전(RFC723*)의 차이를 알아보자.

RFC2616의 헤더

0) POST /car HTTP/1.1

1) Host: localhost:8000
2) User-Agent: Mozilla/5.0 (Macintosh;... )... Firefox/51.0
3) Accept: text/html, application/xhtml+xml, ..., /; q=0.8
4) Accept-Language: en-US, en;q=0.5
5) Connection: keep-alive
6) Upgrade-Insecure-Requests: 1
7) Content-Type: multipart/form-data; boundary=-12656974
8) Content-Length: 345

  • General 헤더 (5 ~ 6): 메시지 전체에 적용되는 정보
  • Request 헤더 (1 ~ 4): 요청 정보
  • Response 헤더: 응답 정보
  • Entity 헤더 (7 ~ 8): 엔티티 바디 정보

RFC2616의 메시지 바디

0) HTTP/1.1 200 OK

1) Content-Type: text/html;charset=UTF-8
2) Content-Length: 3423
3)
4) body...

  • 엔티티 헤더 (1 ~ 2)
  • 엔티티 본문 (4)
  • 메시지 본문 (4)

RFC723x

  • 엔티티(Entity) -> 표현(Representation)
  • Representation = representation metadata + representation data

0) HTTP/1.1 200 OK

1) Content-Type: text/html;charset=UTF-8
2) Content-Length: 3423
3)
4) body...

  • 표현 헤더 (1 ~ 2)

  • 표현 데이터 (4)

  • 메시지 본문 (4)

  • 메시지 본문(message body, payload)을 통해 표현 데이터 전달

  • 표현은 요청이나 응답에서 전달할 실제 데이터

  • 표현 헤더는 표현 데이터를 해석할 수 있는 정보 제공

  • 단, 표현 헤더는 representation metadata 와 payload message 를 구분해야 한다.


일반적인 HTTP 헤더의 종류

  • Content-Type: 표현 데이터의 형식 설명
  • Content-Encoding: 표현 데이터 인코딩
  • Content-Language: 표현 데이터의 자연 언어
  • Content-Length: 표현 데이터의 길이
  • 아래부터 협상(Content negotiations, 클라이언트가 선호하는 표현 요청)
  • Accept: 클라이언트가 선호하는 표현 요청
  • Accept-Charset: 클라이언트가 선호하는 문자 인코딩
  • Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
  • Accept-Language: 클라이언트가 선호하는 자연 언어

협상과 우선순위

  • Quality Values(q)값 사용
  • 범위를 지정하여 우선 순위 지정 (범위:0 ~ 1, 클수록 높은 우선순위, 생략시 1)
    • 예)
      Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
      이런 경우 우선 순위는 ko-KR > ko > en-US > en 이 된다.
  • 구체적인 것을 우선 순위로 지정
    • 예)
      Accept: text/*, text/plain, text/plain;format=flowed, */*
      이런 경우 우선 순위는
      text/plain;format=flowed > text/plain > text/* > */* 가 된다.

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

[HTTP] 헤더 - 6 (조건부 요청)  (0) 2021.06.28
[HTTP] 헤더 - 5 (캐시)  (0) 2021.06.25
[HTTP] 상태 코드 (3xx)  (0) 2021.06.25
[HTTP] 상태 코드 (5xx)  (0) 2021.06.24
[HTTP] 상태 코드 (4xx)  (0) 2021.06.24