浏览器不侦听PHP为缓存发送的头,可以更改什么?

浏览器不侦听PHP为缓存发送的头,可以更改什么?,php,caching,browser,header,http-headers,Php,Caching,Browser,Header,Http Headers,我有一个系统,我在网站上有两层缓存。每个请求都会检查web服务器上的缓存,如果找到已缓存的生成页面,则返回缓存,而不是再次生成缓存 例如: 用户A访问网站URLhttp://www.example.com/home/ 服务器找不到缓存 服务器生成页面 服务器将页面写入缓存 服务器将生成的页面返回给用户A 用户A很高兴 及 用户B访问网站URLhttp://www.example.com/home/ 服务器找到缓存 服务器返回缓存,而不是再次生成页面 用户B很高兴 所有这些工作都没有问题。但我还想

我有一个系统,我在网站上有两层缓存。每个请求都会检查web服务器上的缓存,如果找到已缓存的生成页面,则返回缓存,而不是再次生成缓存

例如:

用户A访问网站URLhttp://www.example.com/home/ 服务器找不到缓存 服务器生成页面 服务器将页面写入缓存 服务器将生成的页面返回给用户A 用户A很高兴 及

用户B访问网站URLhttp://www.example.com/home/ 服务器找到缓存 服务器返回缓存,而不是再次生成页面 用户B很高兴 所有这些工作都没有问题。但我还想添加一个选项,即浏览器不会再次ping服务器,从而节省服务器检查缓存是否存在的时间,并改用自己的缓存

用户A访问URLhttp://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。有人知道服务器为什么会这样做吗?这使浏览器无法使用缓存。

如果为该页/url启用了会话,则会将Pragma:no cache标头添加到http标头,从而阻止浏览器使用缓存。

如果为该页/url启用了会话,Pragma:no cache header将被添加到http头中,这将阻止浏览器使用缓存。

如果使用session\u 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();
然后,如果使用session\u 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();

然后,您可以根据您提供的内容编写自己的标题

这只是一个想法,但是您是否正在使用CTRL-R刷新Firebug/Chrome developer中的页面?这将强制重新加载,忽略任何缓存。您可以尝试使用标头“Pragma:”删除标头,但根据标头的生成位置,这可能不起作用。为了可靠地实现这一点,您还应该能够检查/响应头。我认为必须重新验证指令导致了这种行为。据我所知,该指令使浏览器在提供服务之前根据服务器重新验证页面,尽管它允许浏览器缓存页面-。有意义吗?只是一个想法,但是您是否正在使用CTRL-R刷新Firebug/Chrome developer中的页面?这将强制重新加载,忽略任何缓存。您可以尝试使用标头“Pragma:”删除标头,但根据标头的生成位置,这可能不起作用。为了可靠地实现这一点,您还应该能够检查/响应头。我认为必须重新验证指令导致了这种行为。据我所知,该指令使浏览器在提供服务之前根据服务器重新验证页面,尽管它允许浏览器缓存页面-。有道理吗?