Tôi thực sự đã dành cả ngày cho việc này và không gần gũi hơn để khiến Nginx chơi đúng cách, đặc biệt là cách Nginx định dạng không chính xác tiêu đề Last-Modified: Date không nằm trong RFC cho tiêu đề Sửa đổi lần cuối.
Tôi đã tìm thấy giải pháp này tuy nhiên, nếu bạn đang sử dụng PHP, chỉ hoạt động tốt và có thể được điều chỉnh khi bạn cần. Hy vọng nó giúp. Chỉ cần bao gồm phần này ở đầu trang .php của bạn trước phần còn lại của mã.
<?php
//get the last-modified-date of this very file
$lastModified=filemtime(__FILE__);
//get a unique hash of this file (etag)
$etagFile = md5_file(__FILE__);
//get the HTTP_IF_MODIFIED_SINCE header if set
$ifModifiedSince=(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false);
//get the HTTP_IF_NONE_MATCH header if set (etag: unique file hash)
$etagHeader=(isset($_SERVER['HTTP_IF_NONE_MATCH']) ? trim($_SERVER['HTTP_IF_NONE_MATCH']) : false);
//set last-modified header
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $lastModified)." GMT");
//set etag-header
//header("Etag: $etagFile");
header("ETag: \"$etagFile\"");
//make sure caching is turned on
header('Cache-Control: private, must-revalidate, proxy-revalidate, max-age=3600');
//check if page has changed. If not, send 304 and exit
if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])==$lastModified || $etagHeader == $etagFile)
{
header("HTTP/1.1 304 Not Modified");
header("Vary: Accept-Encoding");
exit;
}
?>
Sau đó kiểm tra trang web của bạn tại redbot.org và www.hscripts.com
CẬP NHẬT:
- Đã thêm gửi tiêu đề khác nhau với phản hồi 304 không được sửa đổi (bắt buộc)
- Modified Cache: Độ tuổi tối đa của tiêu đề điều khiển có thể được điều chỉnh theo nhu cầu của riêng bạn.
- Để cung cấp tín dụng khi đến hạn, tôi đã tìm thấy giải pháp ở đây và tinh chỉnh nó một chút - https://css-tricks.com/snippets/php/intellect-php-cache-control/