浏览器如何比较URL进行缓存?

Ale*_*exZ 2 browser caching cross-browser cache-control browser-cache

具体来说,URL的哪些部分用于比较。假设我在提供CSS样式表https://www.example.com/a/b/test.css与相应的HTTP报头cache-controlmax-age等当用户进入到每个以下URL后,该人将担任缓存文件?

https://www.example.com/a/b/test.css
https://www.example.com/a/b/test.css?abc=123
https://www.example.com/a/b/test.css#abc=124
Run Code Online (Sandbox Code Playgroud)

基本上,我要问的是,当浏览器决定是否使用缓存的资源时,是否比较URL字符串的“搜索”和“哈希”部分。此外,这种比较逻辑在浏览器之间是否是一致的,还是某些标准的一部分?

Joe*_*Joe 5

RFC 7234 状态

主缓存键由请求方法和目标URI组成。

从根本上讲,RFC 7230 解释说

目标URI排除了引用的片段组成部分(如果有的话),因为片段标识符是保留给客户端处理的

将这两个资源放在一起,前两个资源并不等效(因为查询是URI的一部分)。最后一个引用与第一个相同的资源。这是标准指定的行为。

但是,请注意,该规范的先前版本指出

注意:[RFC2616]的13.9节禁止缓存为具有查询组件的URI(即那些包含“?”的URI)计算启发式新鲜度。实际上,这尚未得到广泛实施。

这表明,除非明确告知它是可缓存的,否则某些实现将不会缓存第二个示例。