HTTP 헤더란?
HTTP 헤더는 요청(Request)이나 응답(Response) 메시지에 포함되어 추가적인 정보를 전달하는 역할을 한다.
🌟 헤더 분류 (RFC2616 기준)
✅ 표현(Header)과 표현 데이터(Representation)
HTTP/1.1 최신 표준(RFC723x)에서는 Entity 대신 Representation(표현) 개념을 사용한다.

표현 = 표현 메타데이터 + 표현 데이터(payload)
주요 표현 헤더
✅ 협상 헤더 (콘텐츠 네고시에이션)
클라이언트가 원하는 표현 데이터를 서버에 요청할 때 사용하는 Request 헤더이다.
Accept-Language: ko-KR, ko;q=0더 구체적인 것이 우선.9, en-US;q=0.8, en;q=0.7Accept: text/*, text/plain, text/plain;format=flowed, */*전송 방식?
: 클라이언트의 협상 결과로 선택된 표현 데이터를 실제로 전송하는 방식
| 📌 단순 전송 | 📌 압축 전송 |
![]() |
![]() |
| 📌 분할 전송 | 📌 범위 전송 |
![]() |
![]() |
✅ 일반 정보
✅ 특별한 정보
로그인 후 다시 페이지를 접속하면 사용자의 정보가 없어서 다시 로그인을 해야한다.
그럼 모든 요청과 링크에 사용자 정보 포함해야하나❓
⚠️ 브라우저를 완전 종료하고 다시 열면..?
쿠키를 사용해서 사용자 정보를 저장하자‼️
로그인 후 받은 세션 ID나 JWT 토큰을 쿠키에 저장하여 다음 요청에 자동으로 포함돼서 로그인이 가능해진다.
위 그림처럼 모든 요청에 쿠키를 포함하면 어떨까?
⚠️ 쿠키 정보가 항상 서버에 전송되기 때문에 네트워크 트래픽 추가
최소한의 정보만 사용(세션 id, 인증 토큰)만 사용하고, 서버에 전송하지 않고 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지를 이용하자‼️
⚠️ 보안에 민감한 데이터는 저장하면 안되니 조심
📌생명주기
📌도메인
domain=example.org
명시한다면 명시한 문서 기준 도메인 + 서브 도메인 포함하여 쿠키를 생성하고 생략하면 현재 문서 기준 도메인만 쿠키가 적용된다.
📌경로
path=/ 루트로 지정 📌보안
Secure, HttpOnly, SameSite 등으로 쿠키 보안
캐시란?
클라이언트(브라우저)가 자주 사용하는 데이터를 저장해서 다음 요청 시 네트워크 없이 빠르게 응답할 수 있도록 하는 기능이다.
⚠️ 캐시 없을 때 문제
✅ 캐시 적용 방식
Cache-Control: max-age=60
→ 응답을 받은 후 60초 동안 캐시 유지
⚠️ 캐시 유효 시간이 초과하면 서버를 통해 데이터를 다시 조회하고 캐시를 갱신한다. 이때 다시 네트워크 다운로드가 발생하는 경우는 두가지이다.
🔍 서버에서 기존 데이터를 변경
🔍 서버에서 기존 데이터를 변경 X
캐시 만료 후에도 캐시 재사용 가능한 경우이다. 그렇다면 클라이언트의 데이터와 서버의 데이터가 같다는 사실을 확인할 수 있는 방법이 필요하다.
위 사진과 같이 데이터 수정 날짜가 같으면 바디 내용을 제외하고 304 Not Modified로 응답하여 캐시를 재사용할 수 있다. 이때 전달받은 헤더 데이터를 다시 갱신한다.
✅ 검증 헤더(Validator)
: 캐시 데이터와 서버 데이터가 같은지 검증하는 데이터
⚠️ 문제점
✅ 조건부 요청 (Conditional Request)
If-Modified-Since:
→ 클라이언트가 저장한 Last-Modified 값과 비교
→ 리소스가 수정되지 않았다면 304 Not Modified 반환
If-None-Match:
→ 클라이언트가 저장한 ETag 값을 전송
→ 서버가 ETag를 비교해서 같으면 캐시 사용, 다르면 새 데이터 응답
→ 서버가 캐시 제어 로직을 직접 관리
🔐 Cache-Control
504 오류 발생🔐 Pragma
🔐 Expires
브라우저 외에도 중간 서버(프록시)가 캐시를 보관할 수 있다.
→ 전 세계 사용자에게 빠른 응답을 제공할 수 있다.
프록시 캐시와 원 서버의 네트워크 단절 상황을 살펴보자!
👉 no-cache
오류를 반환하기보다는 프록시 캐시에 저장되어있는 오래된(이전) 데이터라도 보여주자!!
👉 must-revalidate
매우 중요한 돈과 관련된 결과로 생각해보자. 만약 통장의 잔액이 이전 데이터로 뜬다면 사용자는 매우 당황할 것이다. 차라리 504 Gateway Timeout
오류를 반환하자