2017-07-27 82 views
0

我看到使用Cache-Controlmax-age,我可以让浏览器缓存一个网页(及其资源,如CSS,JS,图片等)一段时间。标题缓存HTTP资源,并使用它,如果服务器不可用(即:脱机)?

但我想做到以下几点:

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

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

什么是用于所需行为的HTTP标头值(业务目标是保持最后一个浏览器缓存版本在离线状态下仍能继续使用该网站)?

+1

似乎没有HTTP头 - 这样做的简单方法,除了不实现'陈旧的错误,如果(实际上会很棒)。我会尝试服务工作者,然后https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers – Xenos

回答

0

正如您在您的评论表明,这里的解决方案将是stale-if-error缓存控制扩展:

浑浊的,如果错误缓存控制扩展表明,当遇到 错误,缓存的无论其他新鲜度信息如何,陈旧响应都可用于满足 的要求。

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

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

您现在的选择似乎在要求工作网络连接或使用更多涉及的技术进行手动高速缓存管理时翻倍。

相关问题