动态内容的PHP标头过期


PHP Header Expires for Dynamic Content

通过使用以下命令,我的资源文件将被缓存到2014年4月15日

header('Expires: Thu, 15 Apr 2014 20:00:00 GMT');

如果任何资源文件在到期日前发生更改,如何处理这种情况?

您无法告诉客户端其缓存副本不再有效,因为在该日期之前,客户端甚至不需要再次从服务器请求此URL。

如果确实需要,可以更改资源的URL,例如重命名文件、更改数据库ID等等。当然,您还必须更新资源的任何链接。当客户端遇到其中一个修改后的链接时,它会看到一个没有缓存的URL,所以它必须从服务器请求它。(如果有人仍然试图访问旧的URL,你应该安排它返回指向新URL的301 Moved Permanently响应。)

除非你确信资源在该日期之前不会再次更改(或者至少客户端不需要看到任何未来的更改),否则你应该停止发送远未来的Expires标头。如果您试图避免客户端重复下载大型资源,您可以发送ETag和/或Last-Modified标头。这些允许客户端在未来的请求中使用If None Match和/或If Modified Since,因此如果资源没有更改,则可以发送304 Not Modified。这样,客户端每次都可以检查服务器,但只有在资源发生更改时才能下载

例如,您有一个名为"style.css"的css文件

<link rel="stylesheet" type="text/css" media="all" href="style.css" />

现在您更改了这个css内容,并且希望在用户的浏览器中刷新这个文件

只有你应该像一样向这个css url添加一个字符串

<link rel="stylesheet" type="text/css" media="all" href="style.css?1" />

我添加了"?1'到这个文件s url. then user的浏览器,这个url是新的,它将再次获取这个文件