- 표현
- 협상
- 전송 방식
- 일반 정보
- 특별한 정보
- 인증
- 쿠키
http header-field 구조
field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)
표현헤더 - 전송, 응답 둘다 사용
Content-Type: 표현 데이터의 형식
ex) text/html; charset=utf-8, application/json, image/png
Content-Encoding: 표현 데이터의 압축 방식
ex) gzip, deflate, identity(압축 x)
Content-Language: 표현 데이터의 자연 언어
ex) ko, en, en-US
Content-Length: 표현 데이터의 길이 (바이트 단위)
Transfer-Encoding(전송 코딩)을 사용하면 Content-Length를 사용하면 안된다.
클라이언트가 선호하는 표현 요청 (요청시에만 사용)
협상 우선순위 1
0~1 사이의 숫자로 우선순위를 표현하고 클수록 높은 우선순위를 가진다. (생략시 1)
ex) Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
협상 우선순위 2
구체적인 것이 우선한다.
ex) 1) text/plain;format=flowed, 2) text/plain, 3) text/*, 4) */*
협상 우선순위 3
구체적인 것을 기준으로 미디어 타입을 맞춘다.
단순 전송
Content의 길이를 알고있을때, 단순히 Content-length에 정확한 값을 입력
압축 전송
데이터를 압축하여 보낼 때, 압축 정보와 압축된 길이를 입력
Content-encoding 정보 + Content-length
분할 전송
데이터의 용량이 클 경우 분할해서 데이터를 쪼개서 보냄, content-length가 없으며, 마지막에 0\r\n으로 끝났음을 알려준다.
ex)
Transfer-Encoding: chunked
5
Hello
5
World
0
\r\n
범위 전송
범위를 지정해서 요청 가능
ex) 요청) Range: bytes=1001-2000 응답) Content-Range: bytes 1001-2000 / 2000
From
유저 에이전트의 이메일 정보
Referer
이전 웹 페이지 주소 (유입 경로 분석 가능), A->B로 이동하는 경우 B를 요청할 때 Referer: A를 포함해서 요청한다.
User-Agent
클라이언트의 애플리케이션 정보(웹 브라우저 정보 등)
Server
요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
Date
메시지가 발생한 날짜와 시간, 응답에서만 사용한다.
Host
요청한 호스트 정보(도메인), 요청에서 사용하고 필수 정보이다. 올바른 도메인을 찾아가기 위해 사용된다.
Location
페이지 리다이렉션에 쓰이고, Location 헤더에 적힌 위치에 자동으로 요청을 보낸다.
Allow
허용 가능한 HTTP 메서드, 405(Method Not Allowed)에서 응답에 포함해야하고, 사용 가능한 메서드를 보내준다.
Retry-After
유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
503(Server Unavailable): 서비스가 언제까지 불능인지 알려줄 수 있다.
ex) Retry-After: Fri, 31 Dec 1999 23:59:59 GMT (날짜표기)
Retry-After: 120 (초단위 표기)
Authorization
클라이언트 인증 정보를 서버에 전달
WWW-Authenticate
리소스 접근시 필요한 인증 방법 정의, 401 Unauthorized 응답과 함께 사용
Set-Cookie: 서버에서 클라이언트로 쿠키 전달(응답)
Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달
참고) 쿠키는 서버측에서 생성해서 클라이언트에게 보내주고, 클라이언트는 쿠키를 저장해두었다가 항상 서버로 같이 전송한다. 그래서 네트워크 트래픽을 추가 유발할 수 있으므로 최소한의 정보만 사용(세션 id, 인증 토큰 등)해야 한다.
쿠키의 구조는 sessionId, expires, path, domain, Secure로 구성되어 있다.
해당 포스팅은 김영한님의 인프런 강의 "모든 개발자를 위한 HTTP 웹 기본 지식"를 수강하고 배운 내용을 정리한 글입니다.