Caching 浏览器如何比较缓存的URL?

Caching 浏览器如何比较缓存的URL?,caching,browser,cross-browser,browser-cache,cache-control,Caching,Browser,Cross Browser,Browser Cache,Cache Control,具体来说,URL的哪些部分用于比较。假设我在https://www.example.com/a/b/test.css具有适用于缓存控制、最大年龄等的相应HTTP头。当用户稍后转到以下每个URL时,哪个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 基本上,我要问的

具体来说,URL的哪些部分用于比较。假设我在
https://www.example.com/a/b/test.css
具有适用于
缓存控制
最大年龄
等的相应HTTP头。当用户稍后转到以下每个URL时,哪个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
基本上,我要问的是,当浏览器决定是否使用缓存资源时,是否比较URL字符串的“搜索”和“哈希”部分。此外,这种比较逻辑在不同浏览器之间是否一致,或者是否是某些标准的一部分?

RFC 7234:

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

更重要的是,RFC 7230:

目标URI不包括引用的片段组件(如果有), 因为片段标识符是为客户端处理保留的

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

但是,请注意,规范的早期版本:

注:[RFC2616]第13.9节禁止缓存计算 使用查询组件(即 包含“?”)。在实践中,这并没有得到广泛的应用 执行


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

感谢您的精彩回答!您知道哪些特定的实现会忽略查询字符串吗?特别是在现代浏览器/网络视图中。建议使用“许多较旧的浏览器(包括IE6)”。