我试图了解浏览器中发生的缓存的更深入的内部工作原理。你能帮我吗?
页面 https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching 指出:“主缓存键由请求方法和目标 URI 组成(通常只使用 URI因为只有 GET 请求才是缓存目标)。”
当我这样陈述/回忆它时,我理解正确吗?:
来自对
http://my.site/my/resource
的 GET 请求的响应存储在类似数据库的键值对中,其中键可以是 GET http://my.site/my/resource
或 http://my.site/my/resource
。我认为响应是 HTML / JSON,无论响应正文包含什么内容。
我怀疑这种解释在某些方面是有缺陷的:
如果我对带有
http://my.site/my/resource
标头的 url accept-language: nl-NL
执行 GET 请求会怎样?之后我立即使用 accept-language: en-US
发出另一个 GET 请求。我认为由于之前开始理解的原因,第二个请求应该返回与第一个请求相同的响应。因为缓存键是相同的。我理解正确吗?
如果这是正确的,那么当接受语言标头更改时,请求如何会导致不同的表示形式。您是否需要随请求发送标头,以在接受语言标头更改时绕过缓存?
将
Vary
添加到响应标头:
Vary: Accept-Language
它告诉浏览器缓存在缓存键中使用 Accept-Language 标头。