首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌入版本号与使用HTTP标头进行高效缓存的对比

嵌入版本号与使用HTTP标头进行高效缓存的对比
EN

Stack Overflow用户
提问于 2015-01-27 15:51:33
回答 1查看 260关注 0票数 0

我发现我们可以使用http头文件,如下所示:

代码语言:javascript
运行
复制
Cache-Control: no-cache, max-age=86400
Etag: "asdfasdfasdfa"

确保资源被缓存,并且如果服务器上的文件没有更改,则不会再次从服务器获取资源。如果文件没有改变,服务器发送304响应,如果文件改变,服务器发送200作为响应。

这就是为什么建议在其文件名中嵌入文件的指纹或版本号,例如style.x234dff.css,以确保如果服务器上的资源发生某些更改,则会提供最新的文件

EN

回答 1

Stack Overflow用户

发布于 2015-01-28 20:00:15

它提供了一个很好的模式,以便在需要时检索最新的文件时实现最大的效率。例如,让我们举一个例子。

因此,对于样式表/style.3da37df.css,中间缓存和浏览器将收到如下响应

代码语言:javascript
运行
复制
200 OK
Content-Length: 1024
Cache-Control: max-age=31536000
Etag: x234dff

因此,缓存/浏览器将响应解释为相同的URL,从现在开始,它们可以使用本地副本一年。因此,对于相同的URL,他们甚至不需要请求来查看etag是否已更改。

例如,在上面的交换中,服务器返回1024字节的响应,指示客户端将其缓存长达1年,并提供验证令牌(“x234dff”),该令牌可在响应过期之后使用,以检查资源是否已被修改。

因此,当响应过期时使用etag。因此,在接下来的一年里,他们可以安全地使用本地副本,而不需要任何检查。但是,可能需要强制中间缓存和浏览器强制再次获取样式。这可以通过在文件名中添加指纹来完成,因为每当URL发生更改(由于名称更改而更改)时,都会再次获取资源。因为主页显示Cachec-control: no-cache,即不缓存主页,所以HTML源代码中的这些URL更改总是被浏览器检测到。

那么,我们如何才能两全其美:客户端缓存和快速更新?简单地说,我们可以更改资源的URL,并在其内容发生更改时强制用户下载新的响应。通常,这是通过在文件名中嵌入文件的指纹或版本号来实现的,例如style.x234dff.css。

ETag、缓存控制和唯一URL的组合允许我们提供所有领域中最好的东西:长生命周期的过期时间、对可以缓存响应的位置的控制以及按需更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28165590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档