Cache-Control 헤더 빌더
체크리스트로 HTTP Cache-Control 헤더 생성 — 프레시니스·재검증·immutable·자주 쓰는 프리셋.
Cache-Control: public, max-age=3600no-store는 다른 모든 디렉티브 무효화 — 켜져 있으면 no-transform만 추가로 출력.
사용법
- 시나리오에 맞는 프리셋에서 시작, 조정.
- 숫자 필드는 초 단위 — 비우면 해당 디렉티브 생략.
- 결과를 오리진 서버·CDN 룰·프레임워크 응답 헤더에 복사.
자세한 설명
펼치기접기
RFC 9111을 따르는 유효한 Cache-Control 헤더를 조합합니다. 필요한 지시어(no-cache, no-store, immutable 등)를 체크하고 신선도 구간(max-age, s-maxage, stale-while-revalidate, stale-if-error)을 설정한 뒤 결과 헤더를 복사하면 됩니다. 가장 흔한 배포 형태를 담은 프리셋 네 가지가 있습니다. 불변 정적 자산, 개인화된 렌더링 페이지, 만료본 제공을 허용하는 공개 API 응답, 완전한 no-store입니다.
사람들이 가장 많이 틀리는 지시어는 no-cache인데, 이것은 캐시하지 말라는 뜻이 아닙니다. 저장은 해도 되지만 재사용하기 전에 원본 서버와 재검증하라는 뜻이라, 캐시는 여전히 사본을 갖고 있고 조건부 요청이 304로 답할 수도 있습니다. 실제로 저장을 금지하는 지시어는 no-store입니다. 둘을 함께 쓰는 것은 흔하고 해롭지 않지만, no-store를 뜻하면서 no-cache를 집으면 의도하지 않은 캐시에 응답이 그대로 남습니다.
신선도는 방문자가 응답을 받은 시점이 아니라 원본이 응답을 만든 시점부터 셉니다. 공유 캐시는 그 시계가 얼마나 흘렀는지를 Age 헤더로 알려 주므로, max-age=600인 응답이 CDN에서 500초를 보냈다면 남은 수명 100초로 도착합니다. s-maxage는 공유 캐시에 대해서만 max-age를 덮어쓰는데, CDN 수명은 길게 두면서 브라우저는 더 일찍 재검증하게 만드는 방법이 이것입니다.
immutable이 값어치를 하는 경우는 하나뿐입니다. 사용자가 새로고침을 눌러도 재검증하지 말라고 브라우저에 알리는 것인데, 새로고침이야말로 긴 max-age를 무시하는 유일한 동작입니다. 내용이 절대 바뀔 수 없는 URL에서만 안전하며, 현실적으로는 파일명에 내용 해시가 들어 있다는 뜻입니다.
헤더가 할 수 없는 일은 이미 캐시된 응답에 손대는 것입니다. 오늘 max-age를 줄여도 어제 옛 값으로 나간 사본에는 아무 영향이 없고, 그 사본들은 원래 구간이 끝날 때까지 신선한 상태로 남습니다. 이 비대칭이 정적 자산을 헤더가 아니라 URL로 버전 관리하는 이유입니다.
자주 묻는 질문
immutable은 언제 써?
파일명에 콘텐츠 해시가 포함된 자산에 긴 max-age(보통 1년)와 함께. 그러면 브라우저가 소프트 리프레시 시 조건부 재검증을 스킵.
no-cache와 no-store 차이?
no-cache는 저장된 사본 사용 전 재검증 필요; no-store는 아예 저장 금지. 절대 디스크에 남으면 안 되는 비공개 데이터엔 no-store.
헤더를 넣었는데 캐시가 전혀 안 된다. 왜?
대부분 세 가지 중 하나다. Set-Cookie가 함께 실린 응답은 공유 캐시가 개인용으로 취급하고 CDN은 대개 건너뛴다. 자격 증명과 함께 보낸 요청은 명시적으로 허용하지 않는 한 공유 캐시가 저장하지 않는다. 그리고 브라우저 새로고침은 헤더와 무관하게 재검증하므로, 강제 새로고침으로 시험하면 언제나 헤더가 무시되는 것처럼 보인다. 대신 새 탭에서 URL을 열어보라.
Expires나 ETag와는 어떻게 맞물리나?
둘 다 있으면 max-age가 Expires를 이긴다. Expires는 Cache-Control을 모르는 아주 오래된 캐시에만 의미가 있다. ETag와 Last-Modified는 아예 다른 장치다. 신선도에는 영향을 주지 않고, 응답이 낡은 뒤의 요청을 싸게 만들어 서버가 본문 없이 304로 답할 수 있게 한다. 두 가지는 함께 쓰라고 있는 것이다.
관련 도구
HTTP 헤더 참조
표준 HTTP 요청·응답·CORS·캐싱·보안·쿠키 헤더 약 50개의 검색 가능한 참조.
개발
HTTP Basic 인증 인코더/디코더
username:password를 Base64 Authorization: Basic 헤더로 인코딩 — 또는 기존 헤더 붙여넣어 누군지 확인.
네트워크
HTTP 상태 코드 레퍼런스
1xx-5xx 모든 HTTP 상태 코드 검색 — 요약·RFC·사용 시점·흔한 함정 포함.
네트워크
HTTP 쿠키 파서
Cookie: 요청 헤더 또는 Set-Cookie: 응답 헤더 붙여넣기 → 각 쿠키의 이름·값·속성·경고 표시.
개발
날짜 포맷 변환
ISO·RFC·Unix epoch·로케일 등 어떤 날짜를 입력해도 14+ 표준 형식을 동시에 표시.
시간
CORS 헤더 빌더
Access-Control-* 응답 헤더 체크리스트 구성, 4 프리셋·위험한 조합 실시간 경고.
네트워크