gpt4 book ai didi

ajax - "Cache-Control: only-if-cached"离线时即使响应被缓存也会失败

转载 作者:行者123 更新时间:2023-12-03 18:15:44 25 4
gpt4 key购买 nike

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

在我的应用程序中,我有一个仪表板,我希望它以这种方式运行:

  • 从服务器获取最新数据(服务器总是以 200 OK 响应,带有有效负载和 Last-Modified header ,或 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 时它也会产生响应内容 - 它有无内容)。那么为什么会失败呢?或者我应该如何构建与缓存相关的 header ,使其按描述工作?

    我在跑:
  • Chrome WebView v54
  • github/fetch polyfill(但这并不重要,因为我使用的是裸 HTTP header )
  • express.js 4.14.0 禁用 ETag

  • 其他注意事项:我可能会使用服务 worker ,以便仪表板离线工作,但我相信,使用纯 HTTP header 和浏览器缓存应该可以实现相同的功能。

    最佳答案

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

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

    关于ajax - "Cache-Control: only-if-cached"离线时即使响应被缓存也会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41000039/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com