English
Youngkwang Yang

기록을 위한 개인 기술 블로그

정적 사이트의 캐시 헤더 기본

Web

정적 사이트는 배포가 단순한 대신, 캐시를 잘못 잡으면 옛 파일이 계속 뜬다. 규칙은 자산의 종류에 따라 갈린다.

파일명에 내용 해시가 붙은 자산(번들된 CSS·JS·이미지, 예: app.a1b2c3.js)은 내용이 바뀌면 이름이 바뀐다. 그러니 아주 길게 캐시해도 안전하다.1

Cache-Control: public, max-age=31536000, immutable

반면 index.html은 이름이 그대로다. 새 배포를 바로 반영하려면 짧게 두거나 매번 확인하게 한다.

Cache-Control: no-cache

no-cache2는 “캐시 금지”가 아니라 “쓰기 전에 서버에 바뀌었는지 물어봐”라는 뜻이다. 이름과 달리 캐시는 한다.

이 두 줄이면 대부분의 정적 사이트는 빠르면서도 최신을 유지한다.

Footnotes

  1. max-age=31536000은 1년(초 단위)이다. immutable은 “유효기간 안에는 재검증조차 하지 말라”는 추가 신호로, 새로고침 시 조건부 요청도 건너뛴다.

  2. 진짜 “저장 금지”는 no-store다. no-cache는 저장은 하되 쓰기 전에 매번 서버에 재검증(304 Not Modified 여부)을 요청한다.