微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ajax – 即使缓存响应,“Cache-Control:only-if-cached”在脱机时也会失败

我正在开发一个基于Web视图的移动应用程序和一个基于express.js的后端.从技术上讲,它归结为嵌入式Chrome浏览器和HTTP端点.

在我的应用程序中,我有一个仪表板,我希望它的行为方式如下:

>从服务器获取最新数据(服务器总是响应200 OK,带有效负载和Last-Modified标头,或304 Not Modified,没有内容)

>如果浏览器尚未缓存响应 – 使用Cache-Control执行正常请求:max-age = 0
>否则 – 始终使用If-Modified-Since标头执行条件请求

>如果脱机/网络错误 – 退回到浏览器缓存

>执行Cache-Control:only-if-cached请求,它应该产生缓存的响应,如果没有找到则失败.

问题是,当服务器关闭时,具有Cache-Control的回退请求:only-if-cached总是失败.特别是,即使浏览器缓存了响应,它也会失败(我知道它已经缓存了,因为首先我得到200 OK,并且在第二个请求时它产生响应内容,即使收到304 Not Modified – 它没有内容).那么为什么失败呢?或者我应该如何构建与缓存相关的标题,以便它按照描述的方式工作?

我在跑:

> Chrome WebView v54
> github / fetch polyfill(但它应该不重要,因为我在裸HTTP头上运行)
> express.js 4.14.0,禁用ETag

其他说明:我可能会使用服务工作者,以便仪表板脱机工作,但我相信,使用普通的HTTP标头和浏览器缓存,相同的功能应该是可行的.

解决方法

是的,这应该可以通过HTTP定义的缓存行为实现,但前提是浏览器支持该规范.

在Chromium的源代码中,only-if-cached只出现在第三方模块中(only-if-cached package:chromium).这表明Chrome可能不支持标题.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐