CDN lưu response theo cache key. Mặc định key là method + host + đường dẫn + query string; Vary trong response bổ sung thêm header vào key.
Hệ quả thực tế:
- Query string thừa (?utm_source=...) tạo ra key khác nhau cho cùng một nội dung → giảm tỉ lệ hit rõ rệt. Nên cấu hình CDN bỏ qua các tham số không ảnh hưởng nội dung.
- Vary: Accept-Encoding là bình thường. Vary: User-Agent gần như phá cache vì có vô số biến thể User-Agent.
- Lỡ để Vary: Cookie hoặc quên đánh dấu response cá nhân hoá là private thì trang của user này có thể được phục vụ cho user khác.
Ba cách làm mới nội dung:
1. URL có vân tay nội dung (app.9f2c1a.js) — cách sạch nhất: nội dung mới là URL mới, không cần xoá gì, đặt max-age rất dài và immutable.
2. Purge / invalidate theo đường dẫn hoặc theo tag — dùng cho HTML và ảnh giữ nguyên tên. Purge diện rộng khiến cache trống hàng loạt, origin nhận đỉnh tải ngay sau đó.
3. TTL ngắn + stale-while-revalidate — CDN trả bản cũ ngay và làm mới ngầm, giữ latency thấp trong lúc cập nhật.
Cache-Control: public, max-age=31536000, immutable # hashed asset
Cache-Control: public, max-age=60, stale-while-revalidate=600 # HTML