我在做什么
我从数据库中提取图像并使用所有正确的标题将其发送到浏览器 - 图像显示正常。我还发送了一个ETag标题,使用图像内容的SHA1作为标记。
图像被定期调用半部分,因此缓存有点问题(不会杀死网站,但很高兴)。
问题
$ _ SERVER ['HTTP_IF_NONE_MATCH']无法使用。据我所知,这是因为PHP的“违反缓存控制”的生活方式。我不能搞乱会话缓存限制器,因为我没有访问权限。但是,即使我确实有访问权限,我也不想触摸它:99%的网站都在WordPress下。
环境
任何指导,提示/技巧等都会有所帮助。我没有太多空间来改变环境/结构的东西。
干杯。
答案 0 :(得分:2)
您是否尝试过从apache_request_headers()读取HTTP_IF_NONE_MATCH?
如果你运行的是4.3之前的php,那之前就叫做getallheaders()。
修改强> 我现在看到,在我链接的页面中,您可能还想尝试放置
RewriteEngine on
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
在相应的.htaccess文件中强制Apache设置您尝试阅读失败的PHP $ _SERVER [...]变量。
答案 1 :(得分:0)
如果PHP没有收到If-None-Match匹配标头,那么你无能为力。我不知道你的意思是“PHP”不服从缓存控件“”; PHP在运行中生成任意动态,它不能先验地知道客户端是否缓存了返回的内容。
无论如何,您应该调查客户端是否实际上正在发送标头。如果是,但它没有到达PHP,请检查它是否到达Apache。如果它到达PHP而不是Apache,你总是可以通过mod-rewrite破解一些解决方案,比如将标题添加为查询字符串(未测试!):
RewriteCond %{HTTP_IF_NONE_MATCH} (.+)
RewriteRule ^/get_image.php /get_image.php?if-none-match=%1 [B,QSA]