HTTP 헤더란?
- HTTP 통신의 핵심이 되는 중요한 컴포넌트 중 하나이다.
- 요청 혹은 응답의 필수 구성요소이다.
- 클라이언트와 서버 간의 메세지 전송 및 해석을 돕기 위해 메타데이터와 추가 정보를 제공한다.
HTTP 헤더 포맷의 특징
- 키-밸류 (key-value) 쌍으로 이루어져 있다.
- 순수한 텍스트 (plain text) 로 이루어져 있고, 특정한 문법을 따른다.
- 콜론(
:
) 과 스페이스() 로 구분된다.
- 각 헤더는 하나의 줄로 표현되고, 각 줄은 하나의 헤더 필드를 나타낸다.
보통 아래처럼 생겼다.
네이버의 요청 헤더 (Request Header) 예시
:authority: www.naver.com
:method: GET
:path: /
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
cache-control: max-age=0
cookie: PM_CK_loc=3c860616080e1d3213ae4c2aae7241c88ed50197fa2a85ace57cef8fb93d4169; SB_MODE=plusdeal; NNB=JDPYIFDNNA4WI
sec-ch-ua: "Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
sec-fetch-dest: document
sec-fetch-mode: navigate
sec-fetch-site: none
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
네이버의 응답 헤더 (Response Header) 예시
cache-control: no-cache, no-store, must-revalidate
content-encoding: gzip
content-type: text/html; charset=UTF-8
date: Fri, 14 Apr 2023 14:51:28 GMT
p3p: CP="CAO DSP CURa ADMa TAIa PSAa OUR LAW STP PHY ONL UNI PUR FIN COM NAV INT DEM STA PRE"
pragma: no-cache
referrer-policy: unsafe-url
server: NWS
strict-transport-security: max-age=63072000; includeSubdomains
x-frame-options: DENY
x-xss-protection: 1; mode=block
HTTP 헤더의 타입
타입에 따라 일부 헤더는 요청과 응답 모두에 적용 가능하고, 몇몇 헤더는 요청이나 응답 둘 중 하나에만 적용 가능하다.
일반 헤더 (general header)
요청 응답에 모두 적용 가능한 헤더이다. 메시지, 연결 관리 (Connection Management), 캐싱 정책 등을 제공한다.
Date
: 메세지가 생성된 날짜와 시간 등을 가리킨다.- ex)
Date: Tue, 15 Nov 2022 08:12:31 GMT
- ex)
Cache-Control
: 클라이언트와 서버에서 메세지 캐싱이 어떻게 이루어질지 지시한다.- ex)
Cache-Control: no-cache, no-store, must-revalidate
- ex)
Connection
: 커넥션 관리에 대해 명시한다. 트랜잭션 이후에 커넥션을 계속 살릴지 끊을지를 결정한다.- ex)
Connection: keep-alive
혹은Connection:close
- ex)
커넥션의 관리 방법에 따라서 Cold TCP Connection 과 Warm TCP Connection 이 있다.
요청 헤더 (request header)
클라이언트가 서버에 요청할 때 이용되는 헤더이다. 클라이언트가 사용하는 언어정보 (languages), 유저 에이전트 (user agent) 와 받아들이는 미디어 타입에 대한 정보 (content-type) 등이 포함되어 있다.
User-Agent
: 통신 시 어떤 브라우저 혹은 애플리케이션으로 접근했는지에 대해 명시한다.- ex)
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
- ex)
Accept
: 클라이언트가 이해할 수 있고 처리할 수 있는 Media type (MIME type) 에 대해 명시한다.- ex)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
- ex)
Accept-Language
: 클라이언트가 선호하는 언어에 대해 명시한다.- ex)
Accept-Language: en-US,en;q=0.8
- ex)
Host
: 요청이 보내지는 도메인 이름과 포트에 대해 명시한다.- ex)
HOST: www.example.com:80
- ex)
응답 헤더 (response header)
서버의 응답에 대한 정보를 전달할 때 쓰이는 헤더이다. access control policies 혹은 쿠키와 같은 서버에 대한 정보를 포함한다.
Server
: 요청을 처리하는 서버 소프트웨어에 대해 명시한다.- ex)
Server: Apache/2.4.7 (Ubuntu)
- ex)
Content-Type
: HTTP 바디에 들어있는 메시지의 Media type (MIME type) 에 대해 명시한다.- ex)
Content-Type: text/html; charset=UTF-8
- ex)
Content-Length
: 응답 HTTP 바디의 길이를 명시한다.- ex)
Content-Length: 348
- ex)
Set-Cookie
: 서버에서 클라이언트로 쿠키를 줄 때 사용한다.- ex)
Set-Cookie: sessionId=abc123; Expires=Wed, 21 Oct 2023 07:28:00 GMT;
- 참고자료: HTTP 쿠키란?
- ex)
Access-Control-Allow-Origin
: cross-origin 요청에서 어떠한 origin 이 접근허용되었는지 명시한다.- ex)
Access-Control-Allow-Origin: *
- ex)
엔티티 헤더 (entity header)
보통 HTTP 바디에 대한 정보를 주기 위해 존재한다. 요청과 응답 헤더에서 모두 쓰인다.
Content-Type
Content-Encoding
: 보통 압축 방식에 대한 정보를 주기 위해 사용된다.- ex)
Content-Encoding: gzip
- ex)
Content-Length
이 외에 존재하는 사용자 정의 헤더
- 사용자 정의 헤더로 클라이언트와 서버 간의 추가 메타데이터 혹은 정보를 전달할 수 있다.
- 단, 사용자 정의 헤더를 만들 때는 설명이 포함된 이름을 사용하고 다른 헤더와 중복되지 않는 이름을 사용하도록 각별히 주의하는 것이 좋다.
HTTP/2
의 의사 헤더 (pseudo-header)
:authority
와 같이 헤더의 이름이:
으로 시작하는 헤더이다.- 앞에
:
를 붙여 기존 HTTP 커스텀 헤더와 충돌하지 않는 방식으로 만들어진다.
- 앞에
HTTP/2
프레이밍 매커니즘에서 중요한 역할을 한다.HTTP/1
의 시작 줄 (Start line) 에 있던 정보를 옮겨온 것이다.
:authority
Host
헤더를 대체한다.- ex)
:authority: www.example.com:80
- ex)
:method
- 요청 시 HTTP 메서드를 나타낸다.
-ex):method: GET
:path
- 요청된 리소스의 경로를 나타낸다.
- ex)
:path: /index.html
- ex)
:scheme
- 프로토콜 스키마에 대해 명시한다.
- ex)
:scheme: https
- ex)
:status
- 응답 코드에 대해 명시한다.
- ex)
:status: 200
- ex)
'네트워크 > HTTP' 카테고리의 다른 글
HTTP/1 에서 HTTP/2 로 가면서 얻는 개선점들 (HTTP1 에서 HTTP2로) (0) | 2023.04.16 |
---|---|
HTTP 응답 메세지의 구조 (0) | 2023.04.15 |
HTTP 요청 메세지의 구조 (0) | 2023.04.15 |
HTTP Content-Type 헤더란? (0) | 2023.04.14 |
HTTP MIME type 이란? (0) | 2023.04.14 |