304 Not Modified는 조건부 요청에 대해 클라이언트가 캐시한 사본이 여전히 유효하므로 본문을 다시 보내지 않는다는 응답입니다. 클라이언트는 If-None-Match(ETag 기반)나 If-Modified-Since(시각 기반)로 자신이 가진 버전을 서버에 알립니다.
리소스가 바뀌지 않았다면 서버는 헤더만 담은 짧은 304를 돌려주고, 클라이언트는 로컬 캐시를 그대로 재사용합니다. 이는 재검증(revalidation) 캐싱의 핵심으로 대역폭과 지연을 크게 줄여 줍니다.
GET /styles/main.css HTTP/1.1
Host: example.com
If-None-Match: "a1b2c3"
If-Modified-Since: Wed, 15 Jul 2026 10:00:00 GMTHTTP/1.1 304 Not Modified
ETag: "a1b2c3"
Cache-Control: max-age=3600
Date: Wed, 16 Jul 2026 09:00:00 GMT// Express sets ETag automatically and returns 304 when
// the incoming If-None-Match matches:
app.get('/data', (req, res) => res.json(payload));curl -i -H 'If-None-Match: "a1b2c3"' https://example.com/styles/main.css
# -> HTTP/1.1 304 Not Modified (no body sent)