现代浏览器是否缓存 ajax 响应?

Do modern browsers cache ajax responses?

我最近发现我们在所有 WebApi 响应中都使用 Cache-Control:no-cache。我知道在浏览器缓存之前确实有很大差异,你永远不知道浏览器是否可以缓存你 json,所以这很重要。

据我现在所记得,现代浏览器都没有缓存 ajax 响应,因此不需要 header。但我真的很想仔细检查并在这里询问有关行为的信息,因为找不到关于该主题的任何最新帖子。

所以真正的问题是:我们是否仍然需要为来自 SPA 应用程序的 Web api 调用设置 Cache-Control:no-cache,如果是,那么哪些浏览器进行缓存?

根据 HTTP/1.1 specification 浏览器 HTTP 缓存键是请求 HTTP 方法和 URI 的组合。浏览器不考虑请求的发出方式:

The primary cache key consists of the request method and target URI. However, since HTTP caches in common use today are typically limited to caching responses to GET, many caches simply decline other methods and use only the URI as the primary cache key.

因此,如果您执行的请求是可缓存的,您仍然需要 header 值。查看 HTTP Caching MDN page and Which webbrowsers use http/1.1 by default? question 了解更多详情。

此外,您可能还需要专门为 IE 添加另一个 header。检查 Make IE to cache resources but always revalidate 问题以获取更多信息。