重新加载 vs 刷新

6
我有这个脚本。
<?php
header("Expires: Sat, 11 Jun 2011 00:00:00 GMT");
echo "Hello World";
?>

它只是写了“Hello World”,并设置缓存在下个星期六过期。现在,当我在FireFox中加载此页面并单击重新加载按钮时,它会向服务器发出新请求以加载页面,而不仅仅是从缓存中提供它(我认为是为了确保last-modified仍然有效)。但是,如果我将光标放在地址栏上并按Enter,FireFox将从缓存中提供内容。为什么会这样?为什么第一种情况(重新加载)会向服务器发出请求,但第二种情况(刷新,我猜测?)会从缓存中提供内容?
2个回答

21

我认为"refresh"和"reload"这两个词基本上是同义词。在RFC 2616中,我看到了描述HTTP/1.1缓存的一行话,它提供了可能有些微小差别的解释:

一个过期时间无法用来强制用户代理刷新其显示重新载入资源

换句话说,也许你可以说刷新适用于显示,而重新载入适用于资源。但由于浏览器对资源的主要用途是显示,我并没有看出有什么区别。

这里是一个简短的介绍,由一位处理浏览器缓存控制的开发人员写��。他喜欢使用以下这些术语:

  • 载入:在地址栏中输入网址并按下Enter;点击链接
  • 重新载入:按下F5Ctrl+R;工具栏的刷新按钮;菜单 -> 重新加载
  • 强制重新载入:按下Ctrl+F5Ctrl+Shift+R
(硬刷新会强制浏览器绕过其缓存。对于Firefox,您可以按住Shift并单击刷新按钮。Wikipedia有一个列表列出了如何在常见浏览器中执行此操作。您可以测试它对此页面的影响。)
回答关于Firefox何时决定刷新的问题,这里是上面链接解释的方式:
  • 加载:直到缓存资源过期之前不会发生任何请求
  • 重新加载:请求包含If-Modified-SinceCache-Control: max-age=0头,如果适用,允许服务器响应304 Not Modified
  • 硬刷新:请求包含Pragma: no-cacheCache-Control: no-cache头,并将绕过缓存

3
当人们刷新页面时,他们通常期望看到新的结果,因此缓存整个页面并没有太多意义。

我猜你是在说重新加载的事情吧? - Rizwan Sharif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接