2011-06-04 121 views
5

我有此脚本刷新VS刷新

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

它只是写的“Hello World”,并设置缓存到下周六到期。

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

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

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

回答

17

我认为术语“刷新”和“重新加载”基本上是同义词。我看到在RFC 2616描述HTTP/1.1缓存,提供了一个可能略有差异这一行:

期满时间不能被用于迫使用户代理刷新其显示重新加载资源

换句话说,也许你可以说刷新是为了显示,而重新加载是为了资源。但是由于浏览器主要用于资源显示,我没有看到有什么区别。

这是关于处理浏览器缓存控制的开发人员的条款short writeup。他更喜欢的术语是这些:

  • 负荷:打输入在地址栏;点击链接
  • 刷新F5; Ctrl + R;工具栏的刷新按钮;菜单 - >刷新
  • 硬盘重装按Ctrl + F5 ; 按Ctrl + + [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头,并绕过缓存
+0

大:)谢谢 – 2011-06-08 20:05:18

2

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

+0

我猜你是在谈论relaod? – 2011-06-04 20:08:21

+0

+1这确实是一个用户界面问题。 – 2011-06-07 19:45:38