【问题标题】:Header to cache an HTTP resource and use it if server is not available (ie: offline)?用于缓存 HTTP 资源并在服务器不可用时使用它的标头(即:脱机)?
【发布时间】:2017-07-27 11:51:56
【问题描述】:

我看到使用Cache-Controlmax-age 可以让浏览器缓存网页(及其资源,如CSS、JS、图片等)一段时间。

但我想做以下事情:

  • 无论缓存包含什么,尝试联系服务器(“正常”行为)
  • 如果服务器响应,则使用服务器的响应(可能是 304)
  • 如果服务器没有响应(即:服务器关闭,或者您像在移动设备上一样离线),则使用缓存包含的内容(如果缓存不包含任何内容,则显示错误)。李>

我真的不明白如何使用 HTTP 响应标头来实现这一点。尝试Cache-Control: max-age=3600 会将响应缓存一个小时,而浏览器永远不会联系服务器。并且使用Cache-Control: no-cache 会强制客户端联系服务器,如果移动设备离线/服务器不可用,则始终返回错误。

要用于所需行为的 HTTP 标头值是什么(业务目标是保留最后一个浏览器缓存版本,以便即使在离线时也能继续使用网站)?

【问题讨论】:

标签: http-headers browser-cache cache-control


【解决方案1】:

正如您在评论中所建议的,这里的解决方案是 stale-if-error 缓存控制扩展:

stale-if-error Cache-Control 扩展表明当一个 遇到错误,可以使用缓存的陈旧响应来满足 请求,而不管其他新鲜度信息。

但是,浏览器不支持它。 Firefox bug 没有看到任何活动,Chrome work on the related stale-while-revalidate 被回滚并放弃。

至少有一个 CDN 支持它 ("Fastly - Stale-While-Revalidate, Stale-If-Error Available Today"),尽管这显然只会在您的源服务器关闭而不是用户缺少网络连接的情况下有所帮助。

您现在的选择似乎是需要有效的网络连接,或使用更复杂的手动缓存管理技术。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-03-30
  • 2011-02-27
  • 2021-11-18
  • 2015-01-16
  • 2016-08-22
  • 2012-08-26
  • 2014-12-23
相关资源
最近更新 更多