Phân Phối Tệp Dung Lượng Lớn Qua CDN: Cấu Hình Cache-Control & Giảm Tải Origin
Các quy tắc tối ưu header Cache-Control, kích hoạt byte-range slicing và chống sốc tải origin khi phân phối file dung lượng hàng trăm MB qua CDN.
Phân phối tệp tin có dung lượng nhiều gigabyte đến hàng trăm nghìn người dùng đồng thời đòi hỏi cấu hình cẩn thận về header cache CDN, bảo vệ origin và tối ưu hóa giao thức.
1. Tối Ưu HTTP Cache-Control Headers
Không bao giờ phục vụ các tệp tĩnh bất biến mà không có chỉ thị cache rõ ràng cho trình duyệt và CDN:
Cache-Control: public, max-age=31536000, immutable
public: Cho phép các CDN edge cache và proxy lưu trữ tệp.max-age=31536000: Thông báo cho trình duyệt lưu tệp trong cache đĩa cục bộ tối đa 1 năm.immutable: Thông báo cho trình duyệt không gửi yêu cầu xác thực lạiIf-None-Matchcó điều kiện khi làm mới trang.
Tải file ZIP mẫu 100MB để kiểm tra response header và chỉ số cache hit của CDN.
Tải File Mẫu 100MB ZIP →2. Bật HTTP Byte-Range Caching
Đảm bảo CDN edge của bạn hỗ trợ Slice / Range requests. Khi người dùng yêu cầu byte 0–1.000.000, CDN chỉ nên lấy phần byte đó từ origin thay vì buộc tải xuống toàn bộ tệp.
3. Ngăn Chặn Origin Shock Bằng Request Collapsing
Khi một tệp phổ biến mới được phát hành, hàng trăm người dùng yêu cầu nó đồng thời trước khi CDN kịp cache. Bật Request Collapsing (Wait for Cache) để chỉ một request được gửi đến origin storage, trong khi tất cả các client khác chờ tại edge cho đến khi có response.
Nguyễn Đại Long
Tác GiảBackend Lead • Chuyên gia Kiến trúc Hệ thống Phân tán & Lưu trữ Đám mây
Hơn 4 năm kinh nghiệm thiết kế các hệ thống xử lý tệp tải lên thông lượng lớn, tối ưu hóa cơ sở dữ liệu và hạ tầng phân tán Cloudflare R2 / AWS S3. Người sáng lập FileDummy và Mạng lưới Hệ sinh thái NDL.
Bài viết này có hữu ích không?
Bấm Thích để ủng hộ tác giả và giúp bài viết lan tỏa tới cộng đồng lập trình viên.
Thảo Luận Kỹ Thuật & Đóng Góp Ý Kiến (0)
Chia sẻ kết quả benchmark, phản hồi các trường hợp biên hoặc đặt câu hỏi chuyên môn.
Chưa có bình luận nào. Hãy là lập trình viên đầu tiên bắt đầu cuộc thảo luận!
Câu Hỏi Thường Gặp (FAQ)
What Cache-Control header should I use for large downloadable files?▾
For immutable versioned assets: Cache-Control: public, max-age=31536000, immutable. For files that may change: Cache-Control: public, max-age=86400, stale-while-revalidate=3600. Always include ETag or Last-Modified for efficient CDN cache validation.
Should I use chunked transfer encoding or Content-Length?▾
For large files, always set Content-Length when the size is known — this enables progress bars and range requests. Chunked transfer encoding is appropriate only when the final size is unknown, such as streaming generated content.
How do I prevent CDN from caching user-specific download responses?▾
Add Cache-Control: private, no-store to responses including access tokens or user-specific URLs. CDNs respect Cache-Control: private and will not cache these responses at edge nodes.