即使响应被缓存,“Cache-Control:only-if-cached”在脱机时也会失败
问题描述:
我正在开发基于web视图的移动应用程序和基于express.js的后端。从技术上讲,它归结为嵌入式Chrome浏览器和HTTP端点。即使响应被缓存,“Cache-Control:only-if-cached”在脱机时也会失败
在我的应用程序,我有一个仪表盘,我想它这样的行为:
- 从服务器获取最新数据(服务器总是
200 OK
与有效载荷和Last-Modified
头,或响应一个304 Not Modified
并没有内容)- 如果浏览器没有响应缓存尚未 - 做一个普通的请求与
Cache-Control: max-age=0
- 否则 - 永远做一个条件请求与
If-Modified-Since
HEA明镜
- 如果浏览器没有响应缓存尚未 - 做一个普通的请求与
- 如果离线/网络错误 - 回落到浏览器的缓存
- 做
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-cached
package:chromium
)中。这表明Chrome可能不支持标题。