我在做什么
我从数据库中提取图像并将其与所有正确的 header 一起发送到浏览器 - 图像显示正常。我还发送了一个 ETag header ,使用图像内容的 SHA1 作为标签。
图片半定期调用,所以缓存有点问题(不会杀死网站,但很高兴有)。
问题
$_SERVER['HTTP_IF_NONE_MATCH'] 对我不可用。据我所知,这是因为 PHP 的“不服从缓存控制”的生活方式。我不能乱用 session 缓存限制器,因为我没有访问权限。但是,即使我确实可以访问,我也不想碰它:网站 99% 的内容都在 WordPress 下。
环境
- PHP 4(不要问)
- Apache 2.2
- WordPress
- 图像保存在数据库 (largeblog) 中,我无法更改。
任何指导、提示/技巧等都会有所帮助。我没有太多空间来改变环境/结构的东西。
干杯。
最佳答案
您是否尝试过从 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[...] 变量。
关于PHP 不遵守我定义的 ETag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2807321/