重新加载vs刷新

Riz*_*rif 6 cache-control browser-cache

我有这个脚本

<?php
header("Expires: Sat, 11 Jun 2011 00:00:00 GMT");
echo "Hello World";
?>
Run Code Online (Sandbox Code Playgroud)

它只写"Hello World"并将缓存设置为在下周六到期.

现在,当我在FireFox中加载此页面并单击重新加载按钮时,它向服务器发出新请求以加载页面而不是仅从缓存中提供它(我认为确保是否last-modified仍然有效).

但是,如果我将光标放在地址栏上并按下Enter,FireFox将从缓存中提供内容.

为什么会这样?为什么在第一种情况下(重新加载)它向服务器发出请求,但在第二种情况下(刷新,我猜?)它从缓存服务?

Abe*_*ker 19

我认为术语"刷新"和"重新加载"基本上是同义词.我在RFC 2616中看到这一行描述了HTTP/1.1缓存,它提供了一个可能的细微差别:

到期时间不能用于强制用户代理刷新其显示重新加载资源

换句话说,也许您可​​以说刷新用于显示,而重新加载用于资源.但是,由于浏览器主要用于显示资源,我看不出有什么区别.

以下是处理浏览器缓存控制的开发人员对条款的简短描述.他喜欢的条款是:

  • load:点击Enter地址栏; 点击链接
  • 重装:F5; Ctrl+ R; 工具栏的刷新按钮; 菜单 - >重新加载
  • 硬重装:Ctrl+ F5; Ctrl+ Shift+R

(硬重新加载迫使浏览器绕过其缓存.对于Firefox,你按住Shift并按下重新加载按钮.维基百科有一个如何为常见浏览器执行此操作的列表.您可以在此页面上测试其效果.)

要回答有关Firefox如何决定何时刷新的问题,以下是上述链接解释的方法:

  • load:在缓存的资源到期之前不会发生请求
  • 重新加载:请求包含允许服务器响应的If-Modified-SinceCache-Control: max-age=0标头(304 Not Modified如果适用)
  • 硬重载:请求包含Pragma: no-cacheCache-Control: no-cache标头,并将绕过缓存