我有一个系统,我在网站上有两层缓存。每个请求都检查Web服务器上的缓存,如果找到已缓存的生成页面,它将返回缓存而不是再次生成缓存。
例如:
http://www.example.com/home/
和
http://www.example.com/home/
所有这一切都没有问题。但我还想添加一个浏览器不会再次ping服务器的选项(节省服务器检查缓存是否存在的时间)并改为使用自己的缓存。
http://www.example.com/home/
我不能让后者工作。在原始页面生成期间,我向页面用户发送以下标题:
header('Cache-Control: public, max-age=10000, must-revalidate');
header('Expires: Fri, 03 Feb 2012 01:59:45 GMT');
但是当我使用Firebug或Chrome开发者工具检查它时,它并没有说它正在使用缓存,而是再次从服务器请求数据。我知道我一定做错了,因为我为Javascript这样的静态文件设置了同样的东西,并且有效。
为了测试这个,我不只是尝试重新加载页面,我在网站上创建了链接,并在每次从服务器请求页面的链接之间移动。
我错过了什么吗?
修改
好吧,显然发生的事情是服务器每次都自动发送“Pragma:no-cache”。有谁知道为什么服务器会这样做?这使浏览器无法使用缓存。
答案 0 :(得分:2)
如果为该页面/网址启用了会话,则Pragma: no-cache
- 标头将添加到http标头,这会阻止浏览器使用缓存。
答案 1 :(得分:2)
如果您使用session_start PHP将添加
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
PHP的全部意义在于提供动态页面。
停止这个......
session_cache_limiter('');
session_start();
然后您可以根据您提供的内容编写自己的标题