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=flowed → text/plain → text/* → */* 순으로 우선순위가 높다.
•
구체적인 것을 기준으로 타입의 우선순위를 맞춘다.
◦
예시) 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 요청 시 서버로 전달된다.