cache-control - 重新加载与刷新

标签 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 会从缓存中提供内容。

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

最佳答案

我认为术语“刷新”和“重新加载”基本上是同义词。我在 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根据处理浏览器缓存控制的开发人员的条款。他更喜欢的术语是:
  • 加载:在地址栏中点击回车;点击链接
  • 重装:F5; Ctrl+R;工具栏的刷新按钮;菜单 -> 重新加载
  • 硬重载:Ctrl+F5; Ctrl+Shift+R

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

    要回答您关于 Firefox 如何决定何时刷新的问题,这里是 link from above解释它:
  • 加载:在缓存资源到期之前不会发生任何请求
  • 重新加载:请求包含 If-Modified-SinceCache-Control: max-age=0允许服务器以 304 Not Modified 响应的 header 如果适用
  • 硬重载:请求包含 Pragma: no-cacheCache-Control: no-cache header 并将绕过缓存
  • 关于cache-control - 重新加载与刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6239090/

    相关文章:

    http - "no-cache"与 "max-age=0, must-revalidate, proxy-revalidate"

    c# - 将 Cache-Control 和 Expires header 添加到 Azure 存储 Blob

    google-chrome - 如何使用元标记防止在谷歌浏览器中缓存

    asp.net-mvc - SSL 握手问题? (是 : Web page hangs, 只有清除浏览器缓存有帮助)

    browser - 缓存对 CORS : No 'Access-Control-Allow-Origin' header is present on the requested resource 的影响

    http - 缓存控制 header 中多个值的含义

    java - 即使在设置 Cache-Control 后,动态生成的 CSS 文件也不会被缓存

    http - 如何设置 HTTP header (用于缓存控制)?

    html - 整页重新加载 (Ctrl+F5) 在 Firefox 中保持滚动位置

    html - 由于缓存,网站 html 不会为用户更新