An Expires*
chỉ thị có "sửa đổi" làm cơ sở của nó đề cập đến thời gian sửa đổi của tệp trên máy chủ. Vì vậy, nếu bạn đặt, nói "sửa đổi cộng với 2 giờ", bất kỳ trình duyệt nào yêu cầu nội dung trong vòng 2 giờ sau khi tệp được sửa đổi (trên máy chủ) sẽ lưu nội dung đó cho đến 2 giờ sau thời gian sửa đổi của tệp. Và trình duyệt biết khi nào thời gian đó là do máy chủ gửi tiêu đề Expires
với thời gian hết hạn thích hợp.
Hãy để tôi giải thích với một ví dụ: nói cấu hình Apache của bạn bao gồm dòng
ExpiresDefault modification plus 2 hours
và bạn có một tập tin index.html
, mà chỉ áp dụng đối với ExpiresDefault
, trên máy chủ. Giả sử bạn tải lên phiên bản index.html
lúc 9:53 GMT, ghi đè index.html
hiện có trước đó (nếu có). Vì vậy, bây giờ thời gian sửa đổi của index.html
là 9:53 GMT. Nếu bạn đang chạy ls -l
trên máy chủ (hoặc dir
trên Windows), bạn sẽ thấy nó trong danh sách:
-rw-r--r-- 1 apache apache 4096 Feb 18 09:53 index.html
Bây giờ, với mọi yêu cầu, Apache sẽ gửi Last-Modified
tiêu đề với thời gian sửa đổi cuối cùng của tập tin. Vì bạn có chỉ thị ExpiresDefault
, nó cũng sẽ gửi tiêu đề Expires
với thời gian bằng với thời gian sửa đổi của tệp (9:53) cộng với hai giờ. Vì vậy, đây là một phần của những gì các trình duyệt thấy:
Last-Modified: Wed, 18 Feb 2009 09:53:00 GMT
Expires: Wed, 18 Feb 2009 11:53:00 GMT
Nếu thời gian mà trình duyệt làm cho yêu cầu này là trước 11:53 GMT, trình duyệt sẽ cache trang, bởi vì nó vẫn chưa hết hạn.Vì vậy, nếu người dùng lần đầu tiên truy cập trang lúc 11:00 GMT, và sau đó đi đến cùng một trang một lần nữa lúc 11:30 GMT, trình duyệt sẽ thấy rằng phiên bản được lưu trong bộ nhớ cache của nó vẫn hợp lệ và sẽ không (hoặc đúng hơn, được phép không) tạo một yêu cầu HTTP mới.
Nếu người dùng truy cập trang lần thứ ba lúc 12:00 GMT, trình duyệt sẽ thấy phiên bản được lưu trong bộ nhớ cache của nó hiện đã hết hạn (sau 11:53) để nó xác thực trang, gửi yêu cầu đến máy chủ với tiêu đề If-Modified-Since. Đáp 304 (không sửa đổi) phản ứng với không có cơ thể sẽ được trả lại kể từ ngày của trang đã không được thay đổi kể từ khi nó được phục vụ đầu tiên. Kể từ ngày hết hạn đã qua - trang là 'cũ' - một yêu cầu xác nhận sẽ được thực hiện mỗi lần tiếp theo trang được truy cập cho đến khi xác nhận không thành công.
Bây giờ, giả sử thay vào đó bạn đã tải lên phiên bản mới của trang tại 11:57. Trong trường hợp này, nỗ lực của trình duyệt để xác nhận phiên bản cũ của trang lúc 12:00 thất bại và nó nhận được trong phản ứng, cùng với các trang mới, hai tiêu đề mới:
Last-Modified: Wed, 18 Feb 2009 11:57:00 GMT
Expires: Wed, 18 Feb 2009 13:57:00 GMT
(Thời gian sửa đổi cuối cùng của tệp trở thành 11:57 khi tải lên phiên bản mới và Apache tính thời gian hết hạn là 11:57 + 2:00 = 13:57 GMT.)
Xác thực (sử dụng ngày gần đây hơn) sẽ không được bắt buộc cho đến 13:57.
(Lưu ý tất nhiên rằng nhiều thứ khác được gửi cùng với hai tiêu đề tôi liệt kê ở trên, tôi chỉ cắt ra tất cả các phần còn lại cho đơn giản)
Xin chào David, điều này có ý nghĩa, tuy nhiên tôi vẫn không chắc chắn, tại sao và cách máy chủ biết gửi trình duyệt. Vì vậy, nếu tôi hiểu chính xác, lần tiếp theo trình duyệt yêu cầu tài nguyên, máy chủ sẽ gửi thông tin đến trình duyệt về trạng thái sửa đổi tệp - nhưng không phải là này có được –
Tôi đã tìm ra điều này sẽ dễ nhất để giải thích bằng ví dụ Tôi đã chỉnh sửa một trong ... –
cảm ơn tuyệt vời cho thời gian của bạn –