gpt4 book ai didi

php - 304 : Not modified and front end caching

转载 作者:IT王子 更新时间:2023-10-29 00:02:19 25 4
gpt4 key购买 nike

我正在使用 PHP 脚本来提供文件。如果文件自客户端上次下载以来未更改,我希望能够在我的 http 响应中发回 304 not modified header 。这似乎是 Apache(以及大多数其他 Web 服务器)中的一项功能,但我不知道如何通过 PHP 实现它。

我听说过使用 $_SERVER['HTTP_IF_MODIFIED_SINCE'],但是这个变量似乎没有出现在我的 $_SERVER super 数组中。

我的问题不是如何返回 304 header ,而是如何知道应该返回一个 header 。


编辑:问题是我的 $_SERVER['HTTP_IF_MODIFIED_SINCE'] 没有设置。这是我的 .htaccess 文件的内容:

ExpiresActive On 
ExpiresByType image/jpeg "modification plus 1 month"
ExpiresByType image/png "modification plus 1 month"
ExpiresByType image/gif "modification plus 1 month"
Header append Cache-Control: "must-revalidate"


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond $1 !^(controller\.php)
RewriteRule (.*\.jpg|.*\.png|.*\.gif) controller.php/$1
</IfModule>

HTTP_IF_MODIFIED_SINCE 仍然没有出现在 $_SERVER super 数组中。

最佳答案

HTTP_IF_MODIFIED_SINCE 是正确的方法。如果你没有得到它,检查 Apache 是否有 mod_expiresmod_headers启用并正常工作。借自a comment on PHP.net :

$last_modified_time = filemtime($file); 
$etag = md5_file($file);
// always send headers
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT");
header("Etag: $etag");
// exit if not modified
if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time ||
@trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) {
header("HTTP/1.1 304 Not Modified");
exit;
}

// output data

关于php - 304 : Not modified and front end caching,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1583740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com