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

问题描述:

我正在开发基于web视图的移动应用程序和基于express.js的后端。从技术上讲,它归结为嵌入式Chrome浏览器和HTTP端点。即使响应被缓存,“Cache-Control:only-if-cached”在脱机时也会失败

在我的应用程序,我有一个仪表盘,我想它这样的行为:

  1. 从服务器获取最新数据(服务器总是200 OK与有效载荷和Last-Modified头,或响应一个304 Not Modified并没有内容)
    • 如果浏览器没有响应缓存尚未 - 做一个普通的请求与Cache-Control: max-age=0
    • 否则 - 永远做一个条件请求与If-Modified-Since HEA明镜
  2. 如果离线/网络错误 - 回落到浏览器的缓存
    • Cache-Control: only-if-cached请求,这是应该要么产生缓存的响应或者如果没有发现故障。

的问题是,当服务器发生故障,与Cache-Control: only-if-cached后备要求总是失败。尤其是,即使浏览器响应已缓存,它也会失败(我知道它已缓存,因为首先我得到一个200 OK,并且即使收到304 Not Modified(它没有内容),第二次请求也会产生响应内容) 。那么为什么它失败呢?或者我应该如何构建与缓存相关的标题,使其如所描述的那样工作?

我运行:

  • 铬的WebView V54
  • github上/取出填充工具(但不应该真正的问题,因为我在裸露的HTTP头操作)
  • express.js 4.14.0与ETag的残疾人

其他说明:我大概可以使用劳务工,使仪表盘脱机工作,但相同的功能应该与普通的HTTP标头和浏览器缓存行,我相信。

是的,这应该可以用HTTP的定义的缓存行为,但只有当浏览器支持该规范。

在Chromium的来源中,only-if-cached似乎只出现在第三方模块(only-if-cachedpackage:chromium)中。这表明Chrome可能不支持标题。