我对整个访问和修改感到困惑。
我希望文件被缓存,直到它们被修改。如果数据相同,则显示缓存版本。如果数据发生了变化,下载更新的版本并缓存它。
我不明白你为什么想要不同的东西?所有这些访问加上 6 个月对我来说没有意义。如果上次修改日期比缓存日期新,则请求一个新文件。这么简单的方法难道不能做到吗?
我希望能够在 2012 年 1 月 1 日创建 index.html 并让每个人都缓存它。在我编辑它之前,我不想再次下载它。假设我在 2012 年 1 月 5 日对其进行了编辑,并且自 2012 年 1 月 1 日以来没有看过 index.html 的人出现,他们应该看到他们有 1/1/2012 缓存,但现在该文件的最后修改时间为1/5/2012 所以他们下载 1/5/2012 版本并缓存它。
我从不想编辑某些内容并且让用户在任何时间段内都看不到它。我希望在下一个请求时查看我的所有编辑。
如何对所有文件执行此操作?
小智 9
这里有两个概念:缓存和带宽节省。对于您的用例,我会忘记Expires:,但我会在之后解释它。
如果您从文件夹提供物理文件,网络服务器将添加一两个标题:
ETag: xyzzas4324@asdad/33: 用作该文件版本的 ID,并在文件内容更改时更改;和/或Last-Modified: <date>:这是相同的修改日期,如文件的属性所示。所以下一次,浏览器会稍微改变一下 http://$URL/file :
If-None-Match: xyzzas4324@asdad/33; 和/或If-Modified-Since: <same date>如果文件没有被更改,服务器会向304 Not Modified浏览器发回一个which 信号,表明它应该显示缓存的版本。
注意:这仅避免了该特定文件的重复传输;浏览器仍然必须等待网络服务器的答复。所以还有一些延迟。
这就是Expires进来的地方。假设请求的文件是一个 RSS 提要。如果有Expires: <2 hours from now>标头,则该浏览器将不会在该时间间隔内重复该请求。没有等待服务器的浏览器延迟,没有增加负载。
有一本书更详细地介绍了:构建可扩展的网站。它更详细地介绍了这些技巧,但我会给你简要介绍:
这是你应该如何从旧徽标更改为新徽标,假设您已经设置Expires: <6 years>了整个assets/*
index.html v1:
<h1>Welcome to Example Inc!</h1>
<img src="assets/logo_v1.jpg">
Run Code Online (Sandbox Code Playgroud)
index.html v2:
<h1>Welcome to Example Inc!</h1>
<img src="assets/logo_v2.jpg">
Run Code Online (Sandbox Code Playgroud)
请注意,index.html 没有 Expires: <6 years>. 它得到304 Not Modified治疗。当您更改其中一项资产时,您会增加其版本号并更改使用它的 .html 文件。
你可以两全其美。
不要做任何事情。Apache 已经具有您期望的开箱即用行为。
当浏览器请求一个它已经看到并缓存的 URL 并且用户没有明确强制重新加载时,它会包含一个If-Modified-Since带有前一个请求时间戳的标头。如果服务器确定资产自If-Modified-Since时间戳以来没有改变,那么它只会响应304 Not Modified. (除了时间戳,还有另一个标题ETag用于检查缓存有效性,它通过比较内容的散列来工作,但这不会对本讨论添加任何内容。)
您想要使用任何mod_expires功能的唯一时间是当您想要告诉浏览器不要打扰发出 HTTP 请求以检查缓存的资产在一段时间内是否是最新的。例如,你可以有你的地方CSS文件位于一个方案/style.1.css,和你的名字,随后将其作为版本/style.2.css,/style.3.css完全通过设置等。在这种情况下,你可以节省HTTP请求的开销Expires头。
| 归档时间: |
|
| 查看次数: |
2167 次 |
| 最近记录: |