Giới Thiệu Tổng Quan Về Expires Header

Expires header là một thành phần trong tiêu đề HTTP (HTTP header) cho phép trình duyệt web và các proxy server biết được thời điểm một tài nguyên cụ thể (như hình ảnh, file CSS, JavaScript) sẽ hết hạn. Khi một tài nguyên có expires header được thiết lập, trình duyệt sẽ lưu trữ (cache) tài nguyên đó trong một khoảng thời gian nhất định. Khi người dùng quay lại trang web, thay vì tải lại toàn bộ tài nguyên từ máy chủ gốc, trình duyệt sẽ lấy dữ liệu từ bộ nhớ cache cục bộ, giúp giảm tải cho server và tăng tốc độ tải trang đáng kể.
Việc hiểu rõ expires header là gì và cách thức hoạt động của nó là nền tảng quan trọng cho bất kỳ ai làm SEO, quản trị website hay phát triển web. Google và các công cụ tìm kiếm khác đánh giá cao tốc độ tải trang, và việc sử dụng expires header hiệu quả là một trong những biện pháp then chốt để cải thiện điểm số Core Web Vitals cũng như trải nghiệm người dùng.
Expires Header Hoạt Động Như Thế Nào?
Expires header hoạt động dựa trên cơ chế thời gian tuyệt đối. Cụ thể, header này chứa một giá trị ngày tháng (theo định dạng HTTP-date) đại diện cho thời điểm tài nguyên được coi là không còn hợp lệ. Ví dụ: Expires: Thu, 31 Dec 2025 23:59:59 GMT. Khi trình duyệt nhận được header này, nó sẽ so sánh thời gian hiện tại với thời điểm hết hạn. Nếu thời gian hiện tại nhỏ hơn thời điểm hết hạn, trình duyệt sẽ sử dụng phiên bản cached mà không cần gửi yêu cầu đến server. Ngược lại, nếu tài nguyên đã hết hạn, trình duyệt sẽ gửi yêu cầu mới để lấy phiên bản cập nhật.
Điều quan trọng cần lưu ý là expires header sử dụng thời gian từ phía máy khách (client-side time). Do đó, nếu đồng hồ của người dùng bị sai lệch, cơ chế cache có thể hoạt động không chính xác. Đây là lý do mà sau này HTTP/1.1 giới thiệu header Cache-Control với chỉ thị max-age linh hoạt hơn, dựa trên thời gian tương đối (số giây kể từ khi tài nguyên được yêu cầu). Tuy nhiên, expires header vẫn được hỗ trợ rộng rãi và thường được sử dụng kết hợp với Cache-Control để đảm bảo tương thích ngược.
Phân Loại Và Các Thành Phần Liên Quan

Các Loại Cache Headers Thường Gặp
Bên cạnh expires header, có một số header cache khác mà bạn cần biết để tối ưu toàn diện:
- Cache-Control: Header chính trong HTTP/1.1, cung cấp các chỉ thị như public, private, no-cache, no-store, max-age, s-maxage. Đây là header linh hoạt và được khuyến nghị sử dụng làm ưu tiên hàng đầu.
- Last-Modified: Cho biết thời điểm tài nguyên được sửa đổi lần cuối. Trình duyệt có thể gửi header If-Modified-Since để kiểm tra phiên bản mới mà không cần tải toàn bộ nếu tài nguyên chưa thay đổi.
- ETag: Một mã định danh duy nhất cho một phiên bản cụ thể của tài nguyên. Trình duyệt sử dụng ETag thông qua header If-None-Match để yêu cầu server xác nhận tài nguyên có còn hợp lệ hay không.
- Máy chủ gửi phản hồi HTTP kèm theo expires header chỉ định ngày hết hạn.
- Trình duyệt nhận phản hồi và lưu trữ tài nguyên vào bộ nhớ cache (disk cache hoặc memory cache) cùng với thông tin expires.
- Khi có yêu cầu truy cập lại tài nguyên đó, trình duyệt kiểm tra thời gian hết hạn. Nếu chưa hết hạn, nó sử dụng tài nguyên cached và trả về cho trang web mà không cần kết nối đến server.
- Nếu đã hết hạn, trình duyệt gửi yêu cầu có điều kiện (conditional request) kèm If-Modified-Since hoặc If-None-Match. Nếu server trả về 304 Not Modified, trình duyệt vẫn dùng cache cũ; nếu server trả về 200 OK, tài nguyên mới được tải về và thay thế cache.
Cả ba loại header này (Expires, Cache-Control, Last-Modified/ETag) thường được sử dụng kết hợp để tạo ra chiến lược caching mạnh mẽ và linh hoạt.
Quy Trình Xử Lý Expires Header
Lợi Ích Khi Sử Dụng Expires Header Đúng Cách
Cải Thiện Tốc Độ Tải Trang
Khi expires header được thiết lập hợp lý, trình duyệt sẽ không phải tải lại các tài nguyên tĩnh (như logo, stylesheet, script) mỗi lần người dùng truy cập. Điều này giảm thiểu số lượng HTTP requests và dung lượng dữ liệu cần tải, giúp trang web hiển thị nhanh hơn rõ rệt. Trong thực tế, một trang web có thời gian tải trung bình dưới 2 giây có thể đạt tỷ lệ chuyển đổi cao hơn 20% so với trang tải chậm.
Giảm Tải Cho Máy Chủ
Khi cache hoạt động hiệu quả, máy chủ gốc nhận được ít yêu cầu hơn cho các tài nguyên tĩnh. Điều này đặc biệt quan trọng với các website có lượng truy cập lớn hoặc khi sử dụng hosting chia sẻ có tài nguyên hạn chế. Giảm tải cho server đồng nghĩa với việc tiết kiệm băng thông và chi phí vận hành.
Tác Động Tích Cực Đến SEO
Google đã xác nhận rằng tốc độ tải trang là một yếu tố xếp hạng. Core Web Vitals (LCP, FID, CLS) cũng bị ảnh hưởng mạnh mẽ bởi khả năng caching và hiệu suất tài nguyên. Một expires header được cấu hình đúng giúp cải thiện Largest Contentful Paint (LCP) và First Input Delay (FID) gián tiếp thông qua việc giảm thời gian tải tài nguyên. PageSpeed Insights và Lighthouse cũng liệt kê “leveraging browser caching” là một trong các cơ hội tối ưu chính.
Hạn Chế Và Những Điều Cần Lưu Ý

Không Phù Hợp Với Tài Nguyên Thay Đổi Thường Xuyên
Nếu bạn đặt expires header quá dài cho các tài nguyên có thể thay đổi thường xuyên (ví dụ: file CSS/JS đang phát triển), người dùng sẽ không thấy được phiên bản mới nhất cho đến khi cache hết hạn. Điều này có thể gây ra lỗi giao diện hoặc chức năng. Giải pháp là sử dụng kỹ thuật fingerprinting (thêm version hoặc hash vào tên file) để buộc trình duyệt tải lại khi có thay đổi.
Phụ Thuộc Vào Đồng Hồ Trình Duyệt
Như đã đề cập, expires header dựa vào thời gian tuyệt đối của máy khách. Nếu đồng hồ của người dùng bị chỉnh sai, cache có thể hết hạn sớm hoặc muộn hơn dự kiến. Do đó, nên kết hợp với Cache-Control: max-age để có cơ chế dự phòng.
Rủi Ro Khi Đặt Thời Gian Hết Hạn Quá Xa
Nếu bạn đặt expires xa trong tương lai (ví dụ 1 năm) cho các tài nguyên không có fingerprint, bạn sẽ gặp khó khăn khi muốn cập nhật nội dung đó. Người dùng có thể phải xóa cache thủ công hoặc chờ đợi rất lâu mới thấy thay đổi.
So Sánh Expires Header Với Cache-Control
| Tiêu chí | Expires Header | Cache-Control (max-age) |
|---|---|---|
| Loại thời gian | Tuyệt đối (ngày giờ cụ thể) | Tương đối (số giây) |
| Phiên bản HTTP | HTTP/1.0 (vẫn hoạt động trong HTTP/1.1) | HTTP/1.1 (được khuyến nghị) |
| Độ chính xác | Phụ thuộc đồng hồ client | Không phụ thuộc đồng hồ (tính từ thời điểm request) |
| Khả năng kết hợp | Có thể dùng cùng Cache-Control | Cache-Control được ưu tiên cao hơn nếu cả hai cùng tồn tại |
| Ví dụ | Expires: Mon, 01 Jan 2029 00:00:00 GMT | Cache-Control: max-age=31536000 |
Trong thực tế, hầu hết các chuyên gia khuyên nên sử dụng Cache-Control với max-age làm chính, và chỉ dùng Expires như một phương án dự phòng cho các trình duyệt cũ không hỗ trợ Cache-Control.
Hướng Dẫn Cấu Hình Expires Header Chi Tiết
Cấu Hình Trên Apache (File.htaccess)
Nếu bạn sử dụng Apache, có thể thêm các dòng sau vào file.htaccess ở thư mục gốc hoặc thư mục con:
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType audio/ogg "access plus 1 year"
ExpiresByType video/mp4 "access plus 1 year"
ExpiresByType video/webm "access plus 1 year"
ExpiresByType font/ttf "access plus 1 year"
ExpiresByType font/otf "access plus 1 year"
ExpiresByType font/woff "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
Lưu ý: Cú pháp “access plus X” có nghĩa là kể từ thời điểm người dùng truy cập, cache sẽ tồn tại trong X khoảng thời gian.
Cấu Hình Trên Nginx
Trong Nginx, bạn sử dụng chỉ thị expires bên trong block server hoặc location:
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
Dòng add_header Cache-Control “public, immutable” giúp tăng cường cache, đặc biệt với các tài nguyên tĩnh hiếm khi thay đổi.
Cấu Hình Trên IIS (Windows Server)
Trong IIS Manager,
Rất quan trọng. Google sử dụng tốc độ tải trang làm yếu tố xếp hạng, và expires header ảnh hưởng trực tiếp đến thời gian tải. Các công cụ đo lường như PageSpeed Insights đánh giá cao việc “leveraging browser caching”.
Nên đặt expires header bao lâu là hợp lý?
Không có con số cố định, nhưng khuyến nghị chung: tài nguyên tĩnh (hình ảnh, CSS, JS, font): từ 30 ngày đến 1 năm; tài nguyên ít thay đổi hơn (như logo, favicon): 1 năm; các file HTML hoặc API động: vài phút hoặc không cache.
Expires header và Cache-Control: max-age cái nào được ưu tiên?
Theo chuẩn HTTP, nếu cả hai header cùng tồn tại, Cache-Control được ưu tiên hơn. Do vậy, nếu bạn muốn thiết lập thời gian cache, hãy đặt Cache-Control: max-age là chính, và expires chỉ để dự phòng cho các trình duyệt cũ.
Tôi có cần expires header cho API không?
Tùy vào tính chất API. Nếu API trả về dữ liệu tĩnh hoặc ít thay đổi,
Bạn có thể dùng Chrome DevTools: tab Network -> click vào một request -> xem phần Response Headers. Hoặc dùng công cụ trực tuyến như check-headers, curl -I domain.com.
Kết Luận
Expires header là một công cụ đơn giản nhưng cực kỳ hiệu quả để tối ưu cache trình duyệt, cải thiện tốc độ tải trang và giảm tải cho máy chủ. Hiểu được expires header là gì và cách áp dụng nó đúng cách sẽ giúp bạn nâng cao trải nghiệm người dùng và điểm SEO. Tuy nhiên, hãy nhớ rằng expires header không hoạt động độc lập: nên kết hợp với Cache-Control, kỹ thuật fingerprinting, và kiểm tra thường xuyên để đảm bảo chiến lược cache của bạn luôn hiệu quả. Nếu bạn đang bắt đầu tối ưu website, hãy kiểm tra ngay file.htaccess hoặc cấu hình server để thêm expires header cho các tài nguyên tĩnh – đó là một bước nhỏ nhưng mang lại tác động lớn.
- Woocommerce Category Sản Phẩm Lỗi: Nguyên Nhân, Cách Khắc Phục và Phòng Tránh Toàn Diện
- Theme WordPress Responsive Header Lỗi: Nguyên Nhân, Cách Khắc Phục và Phòng Tránh Toàn Diện
- Cách khắc phục lỗi elementor trắng trang nhanh chóng và hiệu quả nhất
- Theme WordPress sau nâng cấp PHP bị lỗi: Nguyên nhân, cách khắc phục và phòng tránh
- Khắc phục lỗi WordPress SES Sending Limit Exceeded: Hướng dẫn chi tiết từ A đến Z
















