목차
1. HTTP 헤더 정의
2. HTTP 표준
3. 표현 헤더
4. 협상 헤더
5. 헤더 전송 방식
6. HTTP 헤더 종류
7. 출처
HTTP 헤더
- HTTP 전송에 필요한 모든 부가 정보
- 메시지 바디 내용, 메시지 바디 크기, 압축, 인증, ...
- 표준 헤더 多
(구) HTTP 표준 (2014~)
- General 헤더: 메시지 전체에 적용되는 정보
- Request 헤더: 요청 정보
- Response 헤더: 응답 정보
- Entity 헤더: 엔티티 바디 정보
HTTP/1.1 200 OK
<!--**********엔티티 헤더**********-->
Content-Type: text/html;charset-UTF-8
Content-Length: 3423
<!--*******************************-->
<!--**********메시지 본문**********-->
<!--**********엔티티 본문**********-->
<html> ... </html>
<!--*******************************-->
<!--*******************************-->
- 메시지 본문은 엔티티 본문을 전달하는데 사용
- 엔티티 본문: 요청이나 응답에서 전달할 실제 데이터
- 엔티티 헤더: 엔티티 본문의 데이터를 해석할 수 있는 정보 제공 (데이터 유형, 길이 등)
(신) HTTP 표준
HTTP/1.1 200 OK
<!--**********표현 헤더**********-->
Content-Type: text/html;charset-UTF-8
Content-Length: 3423
<!--*****************************-->
<!--**********메시지 본문**********-->
<!--**********표현 데이터**********-->
<html> ... </html>
<!--*******************************-->
<!--*******************************-->
- Entity -> Representation
- Representation = Representation Metadata + Representation Data
- 메시지 본문(=페이로드)을 통해 표현 데이터 전달
- 표현: 요청이나 응답에서 전달할 실제 데이터
- 표현 헤더: 표현 데이터를 해석할 수 있는 정보 제공
표현 헤더
Content-Type
- 표현 데이터 형식
- 미디어 타입, 문자 인코딩 지정
- ex: text/html, ...
Content-Encoding
- 표현 데이터 압축 방식
- 데이터 전달하는 곳에서 압축 후 인코딩 헤더 추가
- 데이터 읽는 쪽에서 인코딩 헤더의 정보로 압축 해제
- ex: gzip, deflate, ...
Content-Language
- 표현 데이터의 자연 언어
- ex: ko, en, en-US, ...
Content-Length
- 표현 데이터의 길이
- 바이트 단위
- Transfer-Encoding(전송 코딩) 사용 시, 사용 불가
협상 헤더
- Contents Negotiation
- 클라이언트가 선호하는 표현 요청
- 요청 시에만 사용
- Accept: client가 선호하는 미디어 타입 전달
- Accept-Charset: client가 선호하는 문자 인코딩
- Accept-Encoding: client가 선호하는 압축 인코딩
- Accept-Language: client가 선호하는 자연 언어
Accept-Language 적용 전/후
-> 사용자는 /event로 접근하면 서버는 default 값인 영어로 메시지 'hello!'를 내려준다.
-> 사용자는 /event로 접근하며 Language를 ko로 달라고 했다. 서버는 ko 값을 받고, 메시지 '안녕하세요'를 보내준다.
-> ko가 없을 경우를 대비해 ko 외의 언어도 우선순위를 지정할 수 있다.
- ex: ko-KR,ko;q=0.9,en-US;q=0.8
우선순위
- 1에 가까울수록 우선. (생략할 경우 1로 간주)
- 구체적인 것이 우선이다.
- text/plain;format=flowed
- text/plain
- text/*
- */*
헤더 전송 방식
단순 전송
압축 전송
- Content-Encoding 추가
분할 전송
- Content-Length를 알 수 없으므로 제거
- Transfer-Encoding: chunked 추가
- 마지막에는 0byte를 줘서 마지막임을 알려줌
범위 전송
- Content-Range
HTTP Header
From
- 유저 에이전트의 이메일 정보 (클라이언트 사용자 메일 주소)
- 일반적으로 잘 사용되지 않음
- 간혹 이 정보를 User-Agent에 두는 경우도 있다.
- 주 사용: 검색 엔진
Referer
- 바로 직전에 머무른 웹 페이지의 주소
- A -> B로 이동하는 경우 B를 요청할 때 Referer:A를 포함해 요청
- Referer를 사용해 유입 경로 분석 가능
- 요청에서 사용
User-Agent
- user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 ...
- 클라이언트의 애플리케이션 정보 (웹 브라우저 정보 등)
- 통계 정보를 뽑기 좋음 (어떤 종류의 브라우저에서 사용하는지 파악 가능하므로)
- 요청에서 사용
Server
- server: Apache/2.2.22 (Debian)
- 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
- 응답에서 사용
Date
- Date: Tue, 15 Nov 1994 08:13:31 GMT
- HTTP 메시지가 발생(생성)한 날짜와 시간
- 응답에서 사용
Host (★)
- 요청한 호스트 정보 (도메인)
- 하나의 서버가 여러 도메인을 처리해야 할 때
- 하나의 IP 주소에 여러 도메인이 적용되어 있을 때
- 요청에서 사용
- 서버는 가상 호스트를 통해 여러 도메인을 한번에 처리할 수 잇다.
- 실제 애플리케이션이 여러개 구동될 수 있다.
- client가 Host 헤더를 포함시켜 server에 전송한다.
- server는 Host 헤더를 통해 aaa.com임을 알고 aaa.com을 이용한다.
Location
- 3xx 응답에 Location 헤더가 있으면 Location 위치로 자동 이동
- 201 (Created): Location 값 = 요청에 의해 생성된 리소스 URI
- 3xx (Redirection): Location 값 = 요청을 자동으로 리디렉션하기 위한 대상 리소스
Allow
- Allow: GET, HEAD, PUT
- 지원 가능한 HTTP 메소드 리스트
- 405 (Method Not Allowed)에서 응답에 포함해야 한다.
Retry-After
- Retry-After: 120 // 초단위 표기
- Retry-After: Fri, 31 Dex 1999 23:32:32 GMT // 날짜 표기
- 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
- 503 (Service Unavailable): 서비스가 언제까지 불능인지 알려줄 수 있다.
Authorization
- Authorization: Basic xxxxxxxxxxxxx
- 클라이언트 인증 정보를 서버에 전달
- value에 들어가는 값은 인증 방식에 따라 다르다.
WWW-Authenticate
- WWW-Authenticate:Newauth realm="apps", type=1, title, ....
- 리소스 접근 시 필요한 인증 방법 정의
- 401 Unauthorized 응답과 함꼐 사용
Set-Cookie (★)
- set-cookie: sessionId=id; expires=쿠키 만료 날짜(생략시 브라우저 종료까지만 유지); path=/; domain=.google.com; Secure
- server->client 쿠키 전달
- 사용자 로그인 세션 관리 및 광고 정보 트래킹
- 쿠키 정보는 항상 서버에 전송
- -> 네트워크 트래픽 추가 유발.
- -> 최소한의 정보만 사용 or 웹 스토리지를 이용해 웹 브라우저 내부에 데이터 저장
- 여러가지 옵션들
- expires=만료일
- max-age=30 (30초 후 삭제. 0 이하 수는 쿠키 삭제)
- domain=example.org (명시한 문서 기준 도메인+ 서브 도메인 포함 쿠키 접근 o)
- path=/home (이 경로를 포함한 하위 경로 페이지만 쿠키 접근)
- Secure (https인 경우에만 쿠키 전송)
- HttpOnly (XSS 공격 방지. javascript에서 접근 불가. HTTP 전송에만 사용)
- SameSite (XSRF 공격 방지. 요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 쿠키 전송)
Cookie (★)
- 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달
- 서버에 의해 Set-Cookie로 client에게 설정된 쿠키 정보
- 서버는 이 쿠키 헤더를 파싱해서 사용함
본 글은 김영한님의 유료 강의를 들으며 요약, 정리를 목적으로 작성한 것으로 홍보나 금전적 목적이 없습니다.
제 방식으로 정리한 것으로 강의 내용을 추가/삭제/변경된 부분이 많으며 자세한 설명은 강의 구매를 추천 드립니다.
출처
1. 모든 개발자를 위한 HTTP 웹 기본 지식 / 김영한 / inflearn
'Develop > CS' 카테고리의 다른 글
[Linux] sudo: cd: command not found (0) | 2021.03.05 |
---|---|
HTTP 헤더 - 캐시, 조건부 요청 (0) | 2021.02.16 |
HTTP 상태 코드 (0) | 2021.02.01 |
HTTP 메소드와 API 설계 (0) | 2021.02.01 |
Web Server와 WAS 차이부터 연동 방법까지 (0) | 2021.01.28 |