当ETag验证返回304时,浏览器是否会自动从缓存中获取?

时间:2017-12-13 21:17:13

标签: caching cache-control etag http-status-code-304

我之前从未使用过etag,我正在尝试将其实现为与获取配置JSON相关的调用。在初步响应中,我设置了1小时的缓存控制,我还收到了etag,我存储在localstorage中。在我的后续请求中,我添加了If-None-Match标头,其中包含我从localstorage中检索到的etag值。正如预期的那样,我收到了304,请求处理程序将其视为错误。我假设浏览器会自动处理304,并从我之前的请求中获取缓存版本。如果不是这种情况,我应该如何正确处理304才能正确获取缓存值?

1 个答案:

答案 0 :(得分:1)

304不是错误回复,它们是有效回复。

如果您的代码将此处理为错误,则应更新代码以将其作为有效响应接受并使用已存储的缓存值。通常情况下,这会在浏览器级别隐藏它处理请求数据的位置,如果缓存是新的,它将为您提供缓存值,如果它的陈旧,它将为您提供从(通常){{1}返回的值响应。

如果您手动拨打电话(即使用200 / Javascript)并手动填充标题,那么如果修改标题并使用{{},您就开始进入管理自己的缓存的领域1}}。

如果您不是手动更改标题而是依赖于浏览器自己的缓存处理,请确保您的JavaScript库设置为使用句柄处理(即如果您使用jQuery然后检查XHR值是否为真)。

有关您的语言/客户端设置/库的一些其他信息会很有帮助。