header("Expires: 0")是什么作用?

10
有人能解释一下这个吗?

它可能旨在告诉浏览器/客户端缓存页面的规则。但它基于HTTP 1.0。HTTP 1.1引入了一些更强大的缓存控制头,也应该设置。 - Asaph
5个回答

9
通常用于防止缓存。但是,这份文件可能会为您提供更好的解释:http://download.oracle.com/docs/cd/E13158_01/alui/wci/docs103/devguide/tsk_pagelets_settingcaching_httpexpires.html
引用该文中的一段话:
永远不要使用Expires = 0来防止缓存。 Expires标头由远程服务器发送,并通过Portal Server传递给浏览器。除非所有三个机器上的时间都同步,否则Expires = 0标头可能会错误地返回缓存内容。为解决此问题,请将Expires标头设置为过去的固定日期。

1
很抱歉,那是不正确的。请参考 https://dev59.com/EGgu5IYBdhLWcg3wYWNX 获取更好的解释。 - user123444555621

5
缓存的工作原理(以及其他一些东西)是通过向浏览器发送一个头部信息,告诉它页面内容何时会过期来实现的。这意味着,如果您发送了如下的头部信息:
header("Expires Sunday June 10th 2011"); // not correct timestamp

内容在该日期之前不会“过期”。然后,浏览器可以使用缓存技术从您的浏览器本地提供页面,而无需再次下载所有内容。

当您将到期时间设置为0时,它确保下一次浏览器加载页面时,它将下载内容,从而为您提供最新数据。然而,正如你从其他答案中看到的,你不应该发送0来防止缓存,而是发送一个过去的日期。


4
"

Expires: 0" 的意思是缓存将始终将此条目视为过期(即在返回给客户端之前需要重新验证它)。

根据HTTP/1.1 RFC中Expires头的定义(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21): "HTTP/1.1客户端和缓存必须将其他无效日期格式,特别是包括值“0”,视为过去时(即“已经过期”)。”

"

-1

设置缓存过期头。这告诉浏览器在必须重新获取之前可以将其缓存多长时间。

我相信0表示它永远不会过期,这可能会引起各种问题。我相信单位是秒。另一方面,它可能意味着它不能被缓存。


-1

一些浏览器总是重新加载样式表、JavaScript 和其他很少更改的文件,这会在加载网站时造成不愉快的延迟(例如 MacOS 上的 Safari)

为了告诉浏览器至少将文件缓存一天,您可以使用

这有一个好的副作用,告诉其他从不刷新页面的浏览器至少每天刷新一次。


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