김영한님의 <모든 개발자를 위한 HTTP 웹 기본 지식>을 수강하고 요약한 내용입니다.
표현 헤더
- 요청, 응답
헤더 이름 | 설명 | 예시 |
Content-Type | 표현 데이터의 형식 | - text/html; charset=utf-8 - application/json - image/png |
Content-Encoding | 표현 데이터의 압축 방식 | - gzip |
Content-Language | 표현 데이터의 자연 언어 | - ko - en |
Content-Length | 표현 데이터의 길이 (바이트) |
협상(컨텐츠 네고시에이션) 헤더
- 클라이언트가 선호하는 표현 요청
- 요청
헤더 이름 | 설명 | 예시 |
Accept | 클라이언트가 선호하는 미디어 타입 | - text/html; charset=utf-8 - application/json - image/png |
Accept-Charset | 클라이언트가 선호하는 문자 인코딩 | |
Accept-Encoding | 클라이언트가 선호하는 압축 인코딩 | - gzip |
Accept-Language | 클라이언트가 선호하는 자연 언어 | - ko - en |
클수록 높은 우선순위
- Quality Values(q) 값 사용
- 0~1 사이의 값, 생략하면 1
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
- ko-KR (q 생략) → 1
- ko → 0.9
- en-US → 0.8
- en → 0.7
구체적일수록 높은 우선순위
Accept: text/*, text/plain, text/plain;format=flowed, */*
- text/plain;format=flowed
- text/plain
- text/*
- */*
기타 헤더
헤더 이름 | 설명 | 사용 |
From | - 유저 에이전트의 이메일 정보 - 잘 사용되지 않음 |
요청 |
Referer | - 이전 웹 페이지 주소 - 유입 경로 분석 가능 |
요청 |
User-Agent | - 클라이언트 애플리케이션 정보 - 어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능 |
요청 |
Server | - 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보 | 응답 |
Date | - 메시지가 발생한 날짜와 시간 | 응답 |
Host | - 요청한 호스트 정보(도메인) - 필수 헤더 - 하나의 IP주소에 도메인 여러개일 때 |
요청 |
Location | - 페이지 리다이렉션 - 3XX → Location으로 리다이렉트 - 201 → 요청에 의해 생성된 리소스 URI |
응답 |
Allow | - 허용 가능한 HTTP 메서드 | 응답 |
Retry-After | - 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간 - 503 → 서비스가 언제까지 불능인지 알려줌 - 날짜 또는 초단위 표기 |
응답 |
인증 헤더
헤더 이름 | 설명 | 사용 |
Authorization | - 클라이언트 인증 정보를 서버에 전달 | 요청 |
WWW-Authenticate | - 리소스 접근 시 필요한 인증 방법 정의 - 401 응답과 함께 사용 |
응답 |
쿠키 헤더
헤더 이름 | 설명 | 사용 |
Set-Cookie | - 서버에서 클라이언트로 쿠키 전달 | 응답 |
Cookie | - 클라이언트가 서버에서 받은 쿠키를 서버로 전달 | 요청 |
캐시 제어 헤더
헤더 이름 | 설명 |
Cache-Control | - 캐시 제어 - max-age : 캐시 유효 시간 (초) - no-cache : 데이터는 캐시해도 되지만, 항상 ORIGIN 서버에 검증하고 사용 - no-store : 데이터에 민감한 정보가 있으므로 저장하면 안됨 - must-revalidate : 캐시 만료 후 최초 조회 시 ORIGIN 서버에 검증해야 함 - public : 응답이 public 캐시에 저장되어도 됨 - private : 응답이 해당 사용자만을 위한 것임, private 캐시에 저장해야 함 (기본값) - s-maxage : 프록시 캐시에만 적용되는 max-age |
Age | - ORIGIN 서버에서 응답 후 프록시 캐시 내에 머문 시간 (초) |
Pragma | - 캐시 제어 (하위 호환) - no-cache |
Expires | - 캐시 만료일 지정 (하위 호환) - 캐시 만료일을 정확한 날짜로 지정 - Cache-Control: max-age 권장. 이거 쓰면 Expires 무시 |
no-cache vs must-revalidate
- no-cache
- 웹 브라우저가 캐시 서버에 요청
- 프록시 캐시가 ORIGIN 서버에 요청 ⏩️ 이때 ORIGIN 서버에 접근할 수 없는 경우, Error를 반환하는 것보다는 오래된 데이터를 보여주도록 설정할 수 있음
- (ORIGIN 서버 검증, 응답)
- 프록시 캐시 응답
- 웹 브라우저 캐시 데이터 사용 / 폐기
- must-revalidate
- 웹 브라우저가 캐시 서버에 요청
- 프록시 캐시가 ORIGIN 서버에 요청 ⏩️ 이때 ORIGIN 서버에 접근할 수 없는 경우, 항상 Error를 반환 (504)
- (ORIGIN 서버 검증, 응답)
- 프록시 캐시 응답
- 웹 브라우저 캐시 데이터 사용 / 폐기
검증 헤더
- 캐시 데이터와 서버 데이터가 같은지 검증하는 데이터
헤더 이름 | 설명 |
Last-Modified | 마지막으로 수정된 날짜 |
ETag | 캐시의 고유한 버전 이름 |
조건부 요청 헤더
- 검증 헤더로 조건에 따른 분기
- 조건이 만족하면 200 OK
- 조건이 만족하지 않으면 304 Not Modified
헤더 이름 | 설명 |
if-Modified-Since | - 이 이후에 데이터가 수정되었는가? - 수정되었으면 200 OK - 수정되지 않았으면 304 Not Modified - Last-Modified 함께 사용 |
if-Unmodified-Since | - 위와 반대 |
if-None-Match | - 이 캐시 버전 이름과 일치하지 않는가? - 일치하지 않으면 200 OK - 일치하면 304 Not Modified - ETag 함께 사용 |
if-Match | - 위와 반대 |
'TIL > 네트워크' 카테고리의 다른 글
[240307] SSH(Secure SHell) 프로토콜 (1) | 2024.03.07 |
---|---|
[240219] HTTP 상태코드 (1) | 2024.02.19 |
[240216] HTTP 메서드 (0) | 2024.02.16 |
[240213] HTTP 기초 (0) | 2024.02.13 |
[240210] 주소창에 www.google.com을 입력하면 발생하는 일 (0) | 2024.02.10 |