【问题标题】:How can cache XHR locally in a browser?如何在浏览器中本地缓存 XHR?
【发布时间】:2020-03-02 19:30:32
【问题描述】:

我想知道如何在我的计算机上本地缓存 XHR 并在下次使用它。好吧,我经常在订单页面访问一个在线商店,有一个表格,其中包含一个带有 XHR 的字段,我必须填写然后使用提交按钮完成我的订单。有时,由于此站点上的流量很大,因此此文件无法在我的系统上加载,我必须多次刷新页面才能获取它。有什么办法可以将它缓存到我的计算机并下次使用它。我不得不说表单的其他字段完全加载并且没有问题。

【问题讨论】:

  • Is there any way to cache this to my computer and use it for next time - 没有
  • 为什么这是不可能的? XHR 只是加载一个 ID 永远不会改变的引用,而 goggle chrome 永远不会将其存储在缓存中以供下次使用。
  • goggle chrome 从不将其存储在缓存中 - chrome 有这种习惯,即不缓存您期望缓存的内容,而缓存您期望的内容不会被缓存 - 老实说,为什么它如此受欢迎令人困惑
  • 那么我怎样才能尽可能快地调用它呢?

标签: javascript json xml xmlhttprequest jqxhr


【解决方案1】:
如果您的 HTTP 缓存标头允许,

XHR 响应会自动缓存在浏览器缓存中。对于最简单的情况,尝试发送带有“Cache-Control: public, max-age=0”和“Last-Modified: [your timestamp]”标头的响应,以查看浏览器生成带有“If-Modified-Since”的条件请求请求标头,然后您可以在其中仅发送“304 Not Modified”响应,并让 XHR API 将缓存的响应公开为对脚本的“200 Ok”响应。或者您可以尝试使用 max-age/s-maxage 和“Expires:”标头,这样您的请求就可以直接从浏览器缓存中提供,甚至无需重新验证/服务器往返。您也可以使用“ETag”标头而不是“Last-Modified”,但由于 ETag 可用于指纹识别,我希望这些在未来公共 HTTP 访问中变得不可接受。

请注意,如果您将 HTTP/2 与服务器推送的资源一起使用,则规则会有所改变,并且缓存的响应仅限于会话,也是为了避免指纹识别。

【讨论】:

  • 我添加了 Cache-Control 和 Last-Modified 标头,但浏览器没有发送“if-modified-since”。
【解决方案2】:

您可以使用本地存储来存储任何数据。 https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage 使用本地覆盖为远程站点创建自己的本地 js 并使用 localStorage。 https://developers.google.com/web/updates/2018/01/devtools#overrides

【讨论】:

  • 如何存储任何数据?你能解释一下吗?
  • 即使您可以存储 XHR 的结果,也无济于事,因为网站代码不会查找您决定存储它的数据
  • 通过本地覆盖,您可以更改任何站点的 javascript,您只需添加将在 XHR 之后将数据存储到本地存储的代码。
  • 这是我正在使用的关于esale.ikco.ir/#!/loginFromWizard 的站点,我在第六个遇到问题。
  • 然后你可以用存储的数据代替从 XHR 接收的数据
猜你喜欢
  • 1970-01-01
  • 2012-07-15
  • 2014-02-05
  • 1970-01-01
  • 2018-08-22
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多