重新加载vs刷新

时间:2011-06-04 20:05:32

标签: cache-control browser-cache

我有这个脚本

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

它只写“Hello World”并将缓存设置为在下周六到期。

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

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

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

2 个答案:

答案 0 :(得分:19)

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

  

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

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

以下是处理浏览器缓存控制的开发人员对条款的short writeup。他喜欢的条款是:

  • 加载:在地址栏中点击 Enter ;点击链接
  • 重新加载 F5 ; 控制 + - [R ;工具栏的刷新按钮;菜单 - &gt;重载
  • 硬重装 Ctrl + F5 ; 控制 + + - [R

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

要回答有关Firefox如何决定何时刷新的问题,link from above解释了这一点:

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

答案 1 :(得分:3)

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