HTTP 메시지의 필드 라인에는 다양한 헤더가 명시된다.
헤더는 요청과 응답의 부가 정보를 전달하며, 통신 동작의 세부 동작 방식을 제어한다.
Host
요청을 보낼 서버의 호스트 이름과 포트를 명시.
예:
Host: www.example.com
User-Agent
클라이언트 프로그램(브라우저, API 클라이언트 등)의 정보를 포함.
서버는 이를 이용해 클라이언트 환경에 맞는 응답을 반환.
Referer
요청을 보낼 때 사용자가 머물던 이전 페이지의 URL.
웹 트래픽 분석이나 보안 정책에 사용.
Authorization
인증 정보를 담는 헤더.
인증 방식(Type)과 자격 증명(Credentials)으로 구성.
Authorization: Basic <credentials>
username:password 형태로 Base64 인코딩.Server
요청을 처리한 서버 소프트웨어 정보 명시.
Allow
해당 리소스에서 허용된 HTTP 메서드 목록을 전달.
Allow: GET, POST
Retry-After
재요청 가능 시점 명시. 503(Service Unavailable) 응답과 함께 사용.
Location
리소스의 새로운 URL 경로 제공. 3xx 리다이렉션 응답 시 사용.
WWW-Authenticate
클라이언트에게 인증 방식을 제시.
예:
WWW-Authenticate: Basic realm="Access to the site"
요청과 응답 모두에 사용 가능한 일반 헤더.
캐시는 자원의 사본을 임시로 저장하여, 동일 요청 시 대역폭 낭비를 줄이고 응답 속도를 향상시키는 기술.
사본 저장: 원본 자원이 아닌 복제본 저장.
위치에 따른 구분
신선도(Freshness)
캐시된 데이터가 원본과 얼마나 일치하는지를 나타냄.
유효기간 설정 (Expires, Cache-Control: max-age)
재검증 (Validation)
If-Modified-Since: 변경일 기준 검증.
ETag (Entity Tag): 버전 태그를 이용한 검증.
ETag: "v1.0"
If-None-Match: "v1.0"
서버 응답 코드
200: 자원 변경됨 → 새 데이터 전송304: 변경 없음 → 캐시 데이터 사용404: 자원 삭제됨HTTP는 상태를 유지하지 않는 프로토콜이므로, 로그인 상태 유지나 세션 관리에는 쿠키가 사용된다.
쿠키의 생성: 서버가 Set-Cookie 헤더로 클라이언트에 쿠키 전달.
쿠키의 사용: 클라이언트는 이후 동일 도메인 요청 시 Cookie 헤더에 쿠키 포함.
Cookie: sessionId=abc123
구성 요소
보안상 민감한 정보는 JWT 또는 세션 토큰을 통한 관리가 선호된다.

참고: RFC 6265 - HTTP State Management Mechanism
서버가 하나의 URI에 대해 클라이언트의 요청 특성에 맞는 최적의 자원 표현을 제공하는 메커니즘.
Accept: 클라이언트가 받을 수 있는 MIME 타입 지정.
Accept: application/json
Accept-Language: 언어 선호도 지정.
Accept-Language: ko-KR, en-US;q=0.8
Accept-Encoding: 인코딩 타입 지정.
Accept-Encoding: gzip, deflate
서버는 요청 헤더를 참고하여 가장 적합한 자원 표현(Representation)을 선택해 응답.
한국어 브라우저 요청 시 한국어 페이지, 영어 브라우저 요청 시 영어 페이지가 반환되는 이유.
참고: MDN HTTP Content Negotiation
질문: 동일 요청에 대해 저장소에서 결과를 꺼내주는 것은 캐시인가?
부분적으로 그렇다.
다만 맥락에 따라 다르다.
HTTP 캐시:
응답 자체를 캐싱하여 동일 요청 시 네트워크 요청 없이 반환.
이는 프로토콜 차원의 캐시.
애플리케이션 캐시(서버 로직):
API 내부에서 DB나 연산 결과를 저장소(Redis 등)에 저장하고, 동일 요청 시 이를 반환하는 구조는 서버 측 캐시(Server-side Cache)에 해당.
HTTP 캐시와 목적은 같지만, 관리 주체가 애플리케이션 로직이다.
참고: Google Developers - Caching Best Practices