Chrome是否在缓存方面违反了标准?

8
我们注意到Chrome会在本地缓存文件,甚至不会向我们的服务器发送请求以检查javascript文件是否有更新版本。
以下是Google缓存的js文件的HTTP响应头示例:
Accept-Ranges:bytes
Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin:*
Content-Encoding:gzip
Content-Length:5479
Content-Type:application/javascript
Date:Tue, 12 Jan 2016 22:46:07 GMT
ETag:"7d68e1ceb647d11:0"
Last-Modified:Tue, 05 Jan 2016 12:44:25 GMT
Server:Microsoft-IIS/8.5
Vary:Accept-Encoding
x-robots-tag:noindex

Chrome缓存这个文件是有效的吗?没有“Cache-control”头或其他声明文件可以本地缓存,它只有ETag和Last-Modified。
顺便问一下 有没有一种方法(可能是一个头)可以指示Chrome检查缓存的文件是否已更改,而不必将版本附加到文件名中?设置no-cache不是一个选项,因为我确实希望它被缓存,但我想使用ETag和Last-Modified头。

我不回答主要问题,但你知道这个吗?https://dev59.com/rW025IYBdhLWcg3w_a6r#7000899 - Miquel Adell
也可能相关的链接:https://dev59.com/w2sy5IYBdhLWcg3w0RXT - Dor Rotman
@Miquel,是的,我知道在开发工具中有这个选项。但是我不能也不想让我的用户使用它来清除我的网站的整个缓存... - gdoron
1个回答

3

除非受到缓存控制(第14.9节)指令的明确约束,否则缓存系统可以始终将成功响应(参见第13.8节)作为缓存条目存储,如果它是新鲜的,则可以在不进行验证的情况下返回,经过成功验证后也可以返回。

您可以始终使用must-revalidate指令。

当缓存中存在must-revalidate指令的响应时,该缓存在响应变得陈旧后不能用该条目回应后续请求,而是必须先与源服务器重新验证。

来源


哦,我很好奇您停止引用的原因是什么,此处规范指出缓存不应缓存无指示可缓存响应。"如果响应中既没有缓存验证器也没有明确的过期时间,则我们不希望其被缓存,但某些缓存可能违反此期望" - gdoron

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