HTTP caching giảm bandwidth và latency bằng cách lưu response tại browser hoặc CDN, điều khiển qua header Cache-Control.
Directives chính:
- max-age=3600 — cache 1 giờ trước khi stale; no-cache — phải revalidate với server trước khi dùng (không phải 'không cache'); no-store — không cache bao giờ (sensitive data).
- public — CDN được phép cache; private — chỉ browser; immutable — bỏ qua revalidation kể cả khi hết max-age, dùng cho asset có content hash.
Chiến lược thực dụng:
- Static assets có hash (bundle.abc123.js) — public, max-age=31536000, immutable: cache 1 năm, không bao giờ revalidate.
- HTML — no-cache: revalidate mỗi lần, serve từ cache nếu ETag khớp.
- Conditional request — client gửi If-None-Match (ETag) / If-Modified-Since; nếu không đổi, server trả 304 Not Modified không body — tiết kiệm bandwidth.
- stale-while-revalidate — max-age=60, stale-while-revalidate=300: serve bản stale ngay, revalidate chạy nền — zero latency impact.
- CDN — đặt s-maxage riêng để CDN (Cloudflare, Vercel Edge) cache lâu hơn browser.
Cache busting: đổi URL khi content đổi (content hash trong tên file, query ?v=2).