我有一个应用程序,其中通过PHP生成许多其他静态javascript文件,以允许配置选项更改静态文件(路径如:mystaticfile.js.php
)。一切正常,除了我似乎无法使缓存设置工作,这些资源正在重新加载每个页面加载。
PHP文件使用以下标头尝试设置缓存设置:
$expires= 60 * 60 * 24 * 60; //cache for 60 days
header('Pragma: public');
header('Cache-Control: max-age=' . $expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT');
header("content-type: application/x-javascript");
但是,在提供文件时,他们会显示如下标题:
HTTP/1.1 200 OK
Date: Sun, 06 Nov 2016 19:18:00 GMT
Server: Apache/2.2.15 (CentOS)
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 744
Keep-Alive: timeout=15, max=95
Connection: Keep-Alive
Content-Type: application/x-javascript
我的第一个想法是,可能是因为Apache设置了ExpiresActive
标志,但我没有看到为PHP文件设置的任何ExpiresByType
规则。
在线阅读听起来ETag
问题可能是问题所在,但我已添加
Header unset Pragma
FileETag None
Header unset ETag
到http.conf文件(并重新启动服务)但仍然没有骰子。
有什么想法吗?
答案 0 :(得分:1)
来源:PHP: Worry about some magical added “Cache-Control” Header ?
这些标题由PHP Session module自动设置 阻止基于浏览器/代理的页面缓存。取决于你的 环境设置,可以通过使用。来控制这些标头 session_cache_limiter()函数或使用php.ini
要禁用这些行为,只需将空字符串传递给 session_cache_limiter()函数如文档中所述:
session_cache_limiter('');