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 |