我发现我们可以使用http标头:
Cache-Control: no-cache, max-age=86400
Etag: "asdfasdfasdfa"
确保资源缓存,如果服务器上的文件未更改,则不会再从服务器获取资源。 如果文件未更改,服务器将发送304响应,如果文件发生更改,则发送200作为响应。
这用于整个目的,那么为什么建议在其文件名中嵌入文件的指纹或版本号 - 例如style.x234dff.css
以确保如果服务器上的资源发生了某些更改,则会提供最新文件
答案 0 :(得分:0)
它提供了一个很好的模式,可以在需要时检索最新文件时实现最高效率。例如,让我们举一个例子。
因此对于样式表/style.3da37df.css,中间缓存和浏览器将收到类似
的响应200 OK
Content-Length: 1024
Cache-Control: max-age=31536000
Etag: x234dff
因此,缓存/浏览器将响应解释为相同的URL,从现在开始,他们可以使用本地副本一年。因此,对于相同的网址,他们甚至不必请求查看etag是否已更改。
例如,在上面的交换中,服务器返回1024字节 响应,指示客户端将其缓存长达1年,并且 提供了一个验证令牌(“x234dff”),可以在之后使用 响应已过期 以检查资源是否已被修改。
所以etag是否在响应过期时使用。因此,对于明年,他们可以安全地使用本地副本而无需任何检查。但是,可能需要强制中间缓存和浏览器强制再次获取样式。这可以通过在文件名中添加指纹来完成,因为无论何时更改URL(由于名称更改),都会再次获取资源。由于主页面显示Cachec-control:no-cache,即不缓存主页面,因此浏览器始终会检测HTML源代码中的这些URL更改。
那么,我们如何充分利用这两个方面:客户端缓存和 快速更新?很简单,我们可以更改资源的URL和强制 用户在内容发生变化时下载新响应。 通常,这是通过嵌入文件的指纹或a来完成的 版本号,在其文件名中 - 例如style.x234dff.css。
ETag,Cache-Control和唯一URL的组合使我们能够 提供最好的世界:长期的到期时间,控制权 可以缓存响应的位置,以及按需更新。