Search

HTTP 헤더

생성일
2023/07/26 04:07
태그

HTTP 헤더

HTTP 헤더는 다음과 같은 구조로 이루어진다.
<field-name>:[OWS]<field-value>[OWS]
OWS는 띄어쓰기를 허용한다는 의미이다.
field-name에는 대소문자 구분이 없다.
헤더 분류
General 헤더
메세지 전체에 적용되는 정보
예시) Connection: close
Request 헤더 : 요청 정보
요청 정보
예시) User-Agent: Mozilla/5.0 (Macintosh; …)
Response 헤더
응답 정보
예시) Server: Apache
Entity 헤더 → Representation 헤더(RFC7230 개정)
엔티티 바디 정보 → 표현 데이터 정보
예시) Content-Type: text/html, Content-Lent: 3423
Restful API의 R은 표현 헤더의 Representation을 의미한다.

표현 헤더(Representation Header)

Content-Type
미디어 타입이나 문자 인코딩 타입을 나타낸다.
예시) text/html; charset=utf-8, application/json, image/png
Content-Encoding
표현 데이터를 압축하기 위해 사용되며, 데이터를 전달하는 곳에서 압축 후 인코딩 헤더를 추가한다.
데이터를 읽는 쪽에서 인코딩 헤더를 읽고 압축을 해제한다.
예시) gzip, deflate, identity
Content-Language
표현 데이터의 자연 언어를 나타낸다.
예시) ko, en, en-US
Content-Length
표현 데이터의 길이를 바이트 단위로 나타낸다.
Transfer-Encoding(전송 인코딩)을 사용하면 Content-Length를 사용하면 안된다.

콘텐츠 협상(Content Negotiation) 헤더

웹브라우저(user-agent)가 언어나 이미지 포맷, 인코딩 방식 등 이용자에게 알맞는 형태의 리소스를 받을 수 있도록, 리소스를 어떤 형태로 받을지 알려주는 메커니즘을 의미한다.
콘텐츠 협상 헤더는 요청 시에만 사용된다.
서버 주도적 협상(server-driven/proactive negotiation)
콘텐츠 협상의 주도권이 서버에 있는 경우로, 브라우저가 선호하는 설정값이 담긴 협상 헤더를 서버에 보내면 서버는 사용자에게 어떤 형태의 콘텐츠가 적절한지 응답하는 방식
에이전트 주도적 협상(agent-driven/reactive negotiation)
콘텐츠 협상의 주도권이 클라이언트에 있는 경우로, 브라우저가 서버에 요청을 보내면 서버는 요청한 리소스의 형태(representation)와 메타데이터(content-type, quality, language)가 어떤 것들이 있는지 알리고 클라이언트가 이 중에 골라서 재요청하는 방식
Accept
클라이언트가 선호하는 미디어 타입 전달
Accept-Charset
클라이언트가 선호하는 문자 인코딩 타입 전달
Accept-Encoding
클라이언트가 선호하는 압축 인코딩 타입 전달
Accept-Language
클라이언트가 선호하는 자연 언어 전달

콘텐츠 협상 우선순위

콘텐츠 협상에서 우선순위는 Quality Values(q) 값을 사용하며, 클수록 우선순위가 높고 1~0 사이의 값을 가진다. 생략하면 1로 적용된다.
예시) Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
구체적일수록 우선순위가 높다.
예시) Accept: text/*, text/plain, text/plain;format=flowed, */*
text/plain;format=flowedtext/plaintext/**/* 순으로 우선순위가 높다.
구체적인 것을 기준으로 타입의 우선순위를 맞춘다.
예시) Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5
image/jpeg의 경우에는 */*의 우선순위를 따르고, text/html;level=3의 경우에는 text/html의 우선순위를 따른다.

전송 타입 헤더

단순 전송
단순한 데이터의 전송
압축 전송
데이터를 특정 인코딩 방식을 이용하여 압축해서 전송
분할 전송
용량이 큰 데이터를 부분적으로 처리하여 분할하여 전송
범위 전송
클라이언트에서 요청한 범위만큼만 전송

From 헤더

User-Agent의 이메일 정보를 담고 있는 헤더
일반적으로 잘 사용되지 않고, 검색 엔진 같은 곳에서 요청을 보낼 때 사용된다.

Referer 헤더

현재 요청된 페이지의 직전 웹 페이지 주소를 담고 있는 헤더
A → B 이동하는 경우 B 웹 페이지 요청 시 헤더에 Referer: A를 포함하여 요청한다.
유입 경로를 분석하는데 사용된다.

User-Agent 헤더

클라이언트의 웹 브라우저나 프로그램 등 어플리케이션의 정보를 담고 있는 헤더
클라이언트에서 요청 시 포함하여 보내며, 통계 데이터를 얻거나 특정 종류의 브라우저에서 장애가 발생하는 경우 파악하는데 도움이 된다.
예시) user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 …

Server 헤더

요청을 처리하는 origin 서버의 소프트웨어 정보를 담고 있는 헤더
서버에서 응답 시 포함하여 보낸다.
예시) Server: Apache/2.2.22 (Debian)

Date 헤더

메세지가 발생한 날짜와 시간 정보를 담고 있는 헤더
서버에서 응답 시 사용된다.
예시) Date: Tue, 15 Nov 1994 08:12:31 GMT

Host 헤더

요청한 호스트의 도메인 정보를 담고있는 헤더
모든 메세지에 필수적으로 포함되어야하며, 요청 시 사용된다.

Location 헤더

페이지 리다이렉션 시 사용되는 헤더
201 Created 혹은 3xx 응답의 결과에 Location 헤더가 있으면 해당 위치로 리다이렉트한다.

Allow 헤더

허용 가능한 HTTP 메서드 종류를 알려주는 헤더
405 Meothod Not Allowed 응답에서 포함한다.
예시) Allow: GET, HEAD, PUT

Retry-After 헤더

User-Agent가 다음 요청을 하기까지 대기해야하는 시간을 나타내는 헤더
503 Service Unavailable 응답에서 서비스가 언제 복구되는지 알려줄 수 있다.
예시) Retry-After: Fri, 31 Dec 1999 23:59:59 GMT(날짜 표기), Retry-After: 120(초단위 표기)

인증 헤더

클라이언트의 인증 정보를 서버에 전달하거나 필요한 인증 방법을 정의하는 헤더
Authorization
클라이언트 인증 정보를 서버에 전달하는 헤더
WWW-Authorization
리소스 접근 시 필요한 인증 방법을 정의하는 헤더
주로 401 Unauthorized 응답과 함께 사용된다.

쿠키 헤더

Set-Cookie
서버에서 응답 시 클라이언트로 쿠키를 전달한다.
Cookie
클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청 시 서버로 전달된다.