【问题标题】:XMLHttpRequest: How to force caching?XMLHttpRequest:如何强制缓存?
【发布时间】:2015-03-25 03:24:27
【问题描述】:

我对 XMLHttpRequests 比较陌生,因为我以前使用过 jQuery 的 AjAX 方法。但是我需要在网络工作者中工作,现在我必须使用经典的 XMLHttpRequest 来解决性能问题。

我正在尝试从 jquery 重建 cache-property。如果缓存应该被禁用,我添加这个:

xhr.setRequestHeader("Cache-Control", "no-cache");

但是如果我想强制缓存(而不是阻止),我应该设置什么标头?

【问题讨论】:

  • @idbehold — 这将与所要求的相反。
  • 我也不喜欢这种方法,因为我的路由(例如,如果 route == someroute/)对时间戳参数无效
  • 哦,呵呵!对不起,忽略我。
  • 如果你真的想强制客户端缓存,你应该抽象出 XHR(在模型或库后面)并在其中实现缓存。
  • 如果您不想一遍又一遍地获取内容,为什么不存储本地副本并使用它?

标签: javascript ajax caching xmlhttprequest


【解决方案1】:

您可以设置多种标头来鼓励缓存,但它们(包括您使用不正确的Cache-Control)是必须由服务器发送的响应标头,而不是请求标头.

使用 Cache-Control 的一个例子:

Cache-Control: max-age=3600

这个Caching Tutorial for Web Authors and Webmasters 更深入地介绍了它们。

【讨论】:

  • 好的,所以我无法使用 JS 强制缓存?
  • @user3631654 — 不在 HTTP 级别。您可以将数据复制到本地存储,然后从那里而不是服务器获取。
  • 好的,这是一个想法。但是还有一个问题:jQuery 也不会强制缓存吗?
  • 所有标准的缓存规则都是由浏览器实现的,jQuery没有做任何事情,因为浏览器已经处理了它。
  • Cache-Control可以作为请求头使用,支持no-cache,如RFC 7234所述。
【解决方案2】:

您可以在 请求 的 Cache-Control 标头中指定 max-stale 而不使用参数。来自RFC 7234:

max-stale 请求指令表明客户端愿意接受已超过其新鲜生命周期的响应。如果为max-stale 分配了一个值,则客户端愿意接受超出其新鲜生命周期不超过指定秒数的响应。如果没有为max-stale 分配值,则客户端愿意接受任何年龄的陈旧响应。

【讨论】:

    【解决方案3】:

    请查看Caching static assets

    Cache-Control: public, max-age=604800, immutable
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 2016-05-18
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      相关资源
      最近更新 更多