【问题标题】:What's the best option for structured cloning of a Fetch API Request Object?结构化克隆 Fetch API 请求对象的最佳选择是什么?
【发布时间】:2015-12-29 01:33:00
【问题描述】:

我正在尝试存储受 CSRF 保护的(查询字符串 + cookie)API POST 请求,以便稍后在 web 应用重新联机时重播。

为此,我想将请求对象(获取 API)保存在 IndexedDB 中,但 IDBObjectStore.put 失败并出现 DataCloneError “无法克隆对象”。

Request 对象有一个简单的 JSON 主体,没有二进制数据,只有字符串。
这是在服务工作者(网络工作者)环境中运行的。

结构化克隆算法不会克隆请求对象有什么原因吗? [Answer: Yes] 如果是这样,我最好的选择是对这个对象进行脱水/再水化以代替结构化克隆吗?

我真的想避免必须知道/访问 Request 对象的各个属性。 我需要的请求部分是 url、标头、正文和 cookie(但同样,我不希望代码必须知道这些)。

提前感谢您的任何建议。

【问题讨论】:

    标签: request indexeddb service-worker fetch-api structured-clone


    【解决方案1】:

    您确定需要将 auth cookie 和 CSRF 参数存储在 IndexedDB 中,而不是在重播 Request 时重新生成它们吗?

    我们在 Google I/O 2015 Web Appended up 中遇到了类似的情况,只是在 IndexedDB 中存储了基本的请求信息(URL + 方法,但序列化的 JSON 正文在概念上是相同的)。每次加载页面并且有可用的有效凭据时,我们都会检查 IndexedDB 以查看是否有任何排队的重播请求,如果有,则使用新的凭据将它们发送到服务器。

    我们没有太多选择,因为我们使用的凭据在一小时后过期,但总的来说,只要您使用的凭据有可能会过时,这似乎是一个合理的模式。

    (如果用户注销,您显然希望清除 IndexedDB 中的排队请求,但无论如何这都是必要的。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-19
      • 2021-06-29
      • 1970-01-01
      • 2017-07-25
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多