Log in Get started
← 가이드 목록
시작하기

Expires 헤더란? 브라우저 캐시 만료 시간을 지정하는 방법 쉽게 이해하기

Expires는 캐시 만료 날짜입니다. Cache-Control max-age와의 차이, 304·캐시 버스팅·쿠키 Expires 혼동까지 초보 기준으로 정리합니다.

Expires 헤더란? 브라우저 캐시 만료 시간을 지정하는 방법 쉽게 이해하기

Cache-Control과 함께 자주 보이는 응답 헤더가 Expires입니다. Expires는 브라우저에게 현재 응답을 언제까지 캐시된 상태로 써도 되는지특정 날짜와 시간으로 알려 줍니다.

쉽게 말하면 — Expires는 캐시 파일에 적어 두는 ‘사용 기한’입니다.

Expires 만료 전에는 캐시를 쓰고 만료 후 서버 확인으로 304 또는 새 파일을 받는 흐름
다운로드 → Expires 전 캐시 사용 → 만료 후 확인 → 304 또는 새 파일

유통기한에 비유하면

우유 상자의 「유통기한: 2026년 8월 1일」처럼, 서버도 「이 콘텐츠는 이 날짜까지 캐시해 써도 됩니다」라고 알려 줄 수 있습니다. 즉 Expires = 캐시 만료 날짜입니다. (HTTP 헤더)

어떻게 생겼을까?

예: Expires: Sat, 01 Aug 2026 00:00:00 GMT. 날짜 형식을 외울 필요는 없습니다. 핵심은 특정 시각을 직접 지정한다는 점입니다. HTTP 날짜는 보통 GMT로 표기되어 한국 시간과 다르게 보일 수 있지만, 브라우저는 기준에 맞게 처리합니다.

max-age와 무엇이 다를까?

  • Expires — 절대 날짜·시간(「8월 1일까지」)
  • Cache-Control: max-age — 지금부터 몇 초(「지금부터 1시간」). 예: max-age=3600

약속으로 비유하면 「오후 3시에 만나요」와 「지금부터 2시간 뒤에 만나요」의 차이입니다. 둘을 함께 줄 수도 있는데, max-age가 있으면 보통 Expires보다 우선해 캐시 수명을 정합니다. 모순되지 않게 맞추는 것이 좋습니다. 자세한 Cache-Control은 Cache-Control이란?을 참고하세요.

만료되면 파일이 삭제될까?

아닙니다. 「기존 캐시를 그대로 최신이라고 믿고 써도 되는 기간이 끝났다」에 가깝습니다. 브라우저는 서버에 다시 확인할 수 있고, 변경이 없으면 304 Not Modified로 기존 파일을 이어 쓸 수 있습니다. 비교에는 ETag·Last-Modified가 쓰입니다.

왜 Cache-Control을 더 많이 쓸까?

Expires는 만료 시각 지정에 가깝고, Cache-Control은 max-age·no-cache·no-store·public/private·s-maxage저장 위치·재검증·저장 금지까지 표현합니다. Expires가 잘못된 것은 아니며, 오래 쓰여 온 헤더로 지금도 웹서버 설정에서 자주 보입니다.

긴 캐시 · 캐시 버스팅 · HTML

로고·아이콘·웹폰트처럼 거의 안 바뀌는 파일은 긴 Expires가 유리할 수 있습니다. 다만 같은 URL로 내용을 덮어쓰면 예전 화면이 남을 수 있습니다. 내용이 바뀌면 logo.v2.png처럼 URL을 바꾸는 캐시 버스팅과 함께 쓰는 것이 흔합니다. 메인 HTML은 URL이 그대로인데 내용이 자주 바뀌므로 너무 긴 캐시는 위험할 수 있습니다. (브라우저 캐시)

과거 날짜 · 쿠키 Expires와 혼동

Expires: Thu, 01 Jan 1970…처럼 과거 날짜는 「이미 만료」로 취급하게 하려는 옛 패턴입니다. 민감 응답은 과거 Expires만보다 Cache-Control: no-store 등을 명확히 두는 편이 낫습니다.

이름만 같은 다른 것쿠키Expires= 속성은 쿠키 만료이고, 이 글의 Expires 헤더는 파일 캐시 만료입니다. 대상이 다릅니다.

CDN · SEO (참고)

CDN도 Expires·Cache-Control을 참고할 수 있지만, CDN 자체 설정이 덮어쓸 수 있습니다. Expires만으로 실제 동작을 단정하지 마세요. SEO 순위를 직접 올리거나 검색엔진 재수집 일정을 Expires로 조절한다고 보장할 수도 없습니다 — 주 역할은 HTTP 캐시 관리입니다.


자주 묻는 질문

Expires란?

콘텐츠를 언제까지 신선한 캐시로 쓸 수 있는지 날짜·시간으로 알려 주는 HTTP 응답 헤더입니다.

만료되면 삭제되나요?

반드시 삭제되지는 않습니다. 다시 쓰기 전 서버 확인이 필요할 수 있습니다.

max-age와 동시에 있으면?

보통 Cache-Control의 max-age가 캐시 수명 결정에 우선합니다.

쿠키 Expires와 같나요?

아닙니다. 헤더는 파일 캐시, 쿠키 속성은 쿠키 만료입니다.


정리

Expires = 캐시의 만료 날짜 · max-age = 지금부터의 타이머

현대 웹에서는 Cache-Control로 더 다양한 정책을 두는 경우가 많지만, Expires도 여전히 자주 보이는 캐시 헤더입니다. 그런데 캐시가 있어도 첫 방문은 먼 원본 서버까지 갈 수 있습니다. 지역마다 파일을 미리 두고 가까운 곳에서 전달하는 기술이 CDN(Content Delivery Network)입니다.