我有这个脚本
<?php
header("Expires: Sat, 11 Jun 2011 00:00:00 GMT");
echo "Hello World";
?>
它只写“Hello World”并将缓存设置为在下周六到期。
现在,当我在FireFox中加载此页面并单击重新加载按钮时,它向服务器发出新请求以加载页面而不是仅从缓存中提供它(我认为确保last-modified
仍然有效)。
但是,如果我将光标放在地址栏上并按 Enter ,FireFox将从缓存中提供内容。
为什么会这样?为什么在第一种情况下(重新加载)它向服务器发出请求,但在第二种情况下(刷新,我猜?)它是从缓存服务的吗?
答案 0 :(得分:19)
我认为术语'刷新'和'重新加载'基本上是同义词。我在RFC 2616中看到这一行描述了HTTP / 1.1缓存,它提供了一个可能的细微差别:
过期时间不能用于强制用户代理刷新其显示或重新加载资源
换句话说,也许您可以说刷新用于显示,而重新加载用于资源。但是,由于浏览器主要使用资源,我看不出有什么区别。
以下是处理浏览器缓存控制的开发人员对条款的short writeup。他喜欢的条款是:
(硬重新加载迫使浏览器绕过其缓存。对于Firefox,您按住 Shift 并按下重新加载按钮。维基百科有a list如何为常见浏览器执行此操作你可以在this page上测试它的效果。)
要回答有关Firefox如何决定何时刷新的问题,link from above解释了这一点:
If-Modified-Since
和Cache-Control: max-age=0
标头,允许服务器响应304 Not Modified
(如果适用)Pragma: no-cache
和Cache-Control: no-cache
标头,并将绕过缓存答案 1 :(得分:3)
当人们刷新页面时,他们通常希望看到新的结果,因此整个页面的缓存没有多大意义。