HTTP có sẵn cơ chế cache để trình duyệt/CDN/proxy tái dùng response cũ, giảm round-trip và tải origin. Hai lớp:
- Freshness (còn tươi) —
Cache-Control: max-age=<giây>: thời gian được coi là còn tươi, dùng thẳng từ cache không hỏi server.no-cache: được lưu nhưng phải revalidate với server trước khi dùng.no-store: không lưu (nội dung nhạy cảm).private(chỉ cache trình duyệt) vspublic(cả CDN/proxy được cache).- Validation (kiểm lại khi hết tươi) — khi cache hết hạn, client hỏi server "có đổi không" bằng conditional request:
ETag(dấu vân tay nội dung) +If-None-Match, hoặcLast-Modified+If-Modified-Since.- Nếu không đổi, server trả
304 Not Modifiedkhông kèm body → client dùng lại bản cache, tiết kiệm băng thông; nếu đổi thì trả200với nội dung mới.
Mẫu thường dùng: asset có hash trong tên → max-age rất dài + immutable; HTML/API dễ đổi → no-cache rồi dựa vào ETag để revalidate rẻ.