HTTP 헤더

### 용도
- HTTP 전송에 필요한 모든 부가 정보 ex) 메시지 바디의 내용, 바디의 크기, 압축, 인증, 서버 정보 등..
분류 - RFC2616(과거)

- General 헤더: 메시지 전체에 적용되는 정보
- Request 헤더: 요청 정보
- Response 헤더: 응답 정보
- Entity 헤더: 엔티티 바디 정보. 엔티티 본문의 데이터를 해석할 수 있는 정보 제공
RFC723x 변화
- 엔티티 -> Representation
- Representation = representation Metadata + Representation Data
- 표현 = 표현 메타데이터 + 표현 데이터
message body
- 메시지 본문을 통해 표현 데이터 전달
- 표현은 요청이나 응답에서 전달할 실제 데이터
- 표현 헤더는 표현 데이터를 해석할 수 있는 정보 제공 ex) 데이터 유형, 길이, 압축 정보 등
표현

- Content-Type: 표현 데이터의 형식
- Content-Encoding: 표현 데이터의 압축 방식
- Content-Language: 표현 데이터의 자연 언어
- Content-Length: 표현 데이터의 길이
Content-Type
바디에 어떤 내용이 들어가는지.
ex) text/html, application/json, image/png
Content-Encoding
- 표현 데이터를 압축하는데 사용함
- 데이터를 읽는 쪽에서 인코딩 헤더의 정보로 압축 해제
ex) gzip, deflate, identity
Content-Language
표현 데이터의 자연 언어를 표현
ex) ko, en, en-US
Content-Length
- 바이트 단위
- Transfer-Encoding을 사용하면 Content-Length를 사용하면 안됨
협상(콘텐츠 네고시에이션)
클라이언트가 서버한테 원하는 표현으로 달라고 요청
- Accept: 클라이언트가 선호하는 미디어 타입 전달
- Accept-Charset: 클라이언트가 선호하는 문자 인코딩
- Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
- Accept-Language: 클라이언트가 선호하는 자연 언어
전송 방식
- 단순 전송: Content에 대한 길이를 알 수 있을 때 사용
- 압축 전송: Content-Encoding을 통해 어떤 방식으로 압축했는지 전달 필요
- 분할 전송: 특정 크기의 chunk로 분할하여 보냄
- 범위 전송: 특정 범위의 컨텐츠만 지정해서 받을 수 있음
일반 정보
Referer
- 현재 요청된 페이지의 이전 웹 페이지 주소
- Referer를 사용해서 유입 경로 분석 가능
User-Agent
Server
- 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
Date
특별한 정보
Host
- 요청한 호스트 정보(도메인)
- 필수
- 하나의 서버가 여러 도메인을 처리해야 할 때 구분해줌
Location
- 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동(리다이렉트)
Allow
Retry-After
- 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
인증
Authorization
WWW-Authenticate
- 리소스 접근시 필요한 인증 방법 정의
- 401 Unauthorized 응답과 함께 사용
쿠키
- Set-Cookie: 서버에서 클라이언트로 쿠키 전달(응답)
- Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청 시 서버로 전달