加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 02:46:51 所属栏目:百科 来源:网络整理
导读:我正在开发一个基于Web视图的移动应用程序和一个基于express.js的后端.从技术上讲,它归结为嵌入式Chrome浏览器和HTTP端点. 在我的应用程序中,我有一个仪表板,我希望它的行为方式如下: 从服务器获取最新数据(服务器总是响应200 OK,带有效负载和Last-Modified
我正在开发一个基于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可能不支持标题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读