我用的是Chrome40(所以一些漂亮和现代的东西)。
cache-control:max-age=0,no-cache
在所有页面上都设置了no-cache-所以我希望浏览器只在首先检查服务器并得到304 Not modified
响应时才使用其缓存中的某些内容。
然而,在按下后退按钮时,浏览器会愉快地点击自己的缓存,而无需与服务器进行检查。
我认为我可以使用max-age=0,no-cache
作为no-store
的一个轻量级替代方案,在这里我不希望用户通过后退按钮看到陈旧的数据(但是数据是无价值的,因此可以缓存)。
我对no-cache
的理解是浏览器必须始终重新验证所有响应。那么为什么Chrome在使用后退按钮时不这么做呢?
无存储
是唯一的选择吗?
摘自http://www.w3.org/protocols/RFC2616/RFC2616-sec14.html#sec14.9.1
无缓存
如果no-cache指令没有指定字段名,则缓存在没有与源服务器成功重新验证的情况下不得使用响应来满足后续请求。这使得原始服务器可以防止缓存,即使是通过已配置为返回过时的客户端请求响应的缓存。
请注意,即使使用无存储
,RFC实际上也允许客户机存储响应,以便在历史缓冲区中使用。这意味着即使指定了no-store
,客户端仍可以使用缓存的响应。
后一种行为包括在浏览器历史记录中以其原始页面标题记录页面的情况。另一个用例是各种移动浏览器的行为,它们不会丢弃前一个页面,直到下一个页面完全加载,因为用户可能想要中止。
关于后退按钮的行为:它不受任何缓存头的影响,请参见http://www.w3.org/protocols/RFC2616/RFC2616-sec13.html#sec13.13
用户代理通常具有历史记录机制,如“后退”按钮和历史记录列表,可用于重新显示会话中先前检索的实体。
历史机制和缓存是不同的。特别是,历史机制不应试图显示资源当前状态的语义透明视图。相反,历史机制旨在准确地显示用户在检索资源时看到的内容。
默认情况下,过期时间不适用于历史记录机制。如果实体仍在存储中,则即使实体已过期,历史机制也应显示该实体,除非用户已专门配置代理以刷新过期的历史文档。
我正在使用: Spring 3.1.2.发布 Primefaces JSF 3.4.1 null 我没有什么想法了,有人知道是什么在我的响应中设置这些头,以便我可以针对适当的部署组件来解决这个问题吗?
在我的servlet过滤器中,我设置了以下响应标头以启用一些资源的缓存: 所以,您能解释一下为什么或者如何在我的servlet过滤器(在JBoss AS 7上部署的JSF/PrimeFaces应用程序中)中设置的值作为http响应标头在chrome中未被修改,但在firefox和IE中却发生了变化。我自己没有编写任何可能覆盖这个头的javascript。实际上,我试图为所有提到的三个浏览器启用“相
响应头如下,为什么浏览器命中强缓存?
我正在尝试使用selenium Python访问一个站点。但是该站点正在通过cloud dflare不断检查和检查。没有其他页面来了。 检查这里的截图。 我尝试了未被发现的chrome,但它根本不起作用。
我正在使用Firefox,我正在从服务器请求几个URL。通过F5或Cntrl R重新加载页面时,浏览器会将请求重新发送到服务器,通过在请求中设置,使用服务器重新验证缓存的响应。这是浏览器处理刷新的理想方式。 但是对于某些URL,它不会重新发送URL,而是从自己的缓存中提供服务。我希望这些请求由原点重新验证。 浏览器无法再次发送此请求的原因可能是什么?请帮忙。
我正在使用Symfony 2.6 HTTP缓存,我在这里遵循Symfony cook book中的所有说明 但是,为什么响应总是x-symfony-cache:miss。我尝试修改privates头上的appmodification.php擦除数组。响应头是x-symfony-cache:get/page:fresh。 在我修改数组后,我遇到了新的问题,当我试图登录到我的网站时,我得到了错误或页面