我有这个脚本
<?php
header("Expires: Sat, 11 Jun 2011 00:00:00 GMT");
echo "Hello World";
?>
它只是写入“Hello World”并将缓存设置为在下周六到期。
现在,当我在 FireFox 中加载此页面并单击重新加载按钮时,它会向服务器发出一个新请求以加载该页面,而不仅仅是从缓存中提供它(我认为是为了确保
last-modified
是否仍然有效)。但是,如果我将光标放在地址栏上并按 Enter,FireFox 会从缓存中提供内容。
为什么呢?为什么在第一种情况下(重新加载)它向服务器发出请求,但在第二种情况下(刷新,我猜?)它从缓存中提供服务?
最佳答案
我认为术语“刷新”和“重新加载”基本上是同义词。我在 RFC 2616 中看到这一行,它描述了 HTTP/1.1 缓存,它提供了可能的细微差别:
An expiration time cannot be used to force a user agent to refresh its display or reload a resource
换句话说,也许你可以说刷新是为了显示,而重新加载是为了资源。但由于浏览器对资源的主要用途是显示,我看不出有什么区别。
这是一个 short writeup根据处理浏览器缓存控制的开发人员的条款。他更喜欢的术语是:
(硬重新加载会强制浏览器绕过其缓存。对于 Firefox,您按住 Shift 并按下重新加载按钮。维基百科有 a list 说明如何为常见浏览器执行此操作。您可以在 this page 上测试其效果。)
要回答您关于 Firefox 如何决定何时刷新的问题,这里是 link from above解释它:
If-Modified-Since
和 Cache-Control: max-age=0
允许服务器以 304 Not Modified
响应的 header 如果适用 Pragma: no-cache
和 Cache-Control: no-cache
header 并将绕过缓存 关于cache-control - 重新加载与刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6239090/