结构化克隆 Fetch API 请求 Object 的最佳选择是什么?

What's the best option for structured cloning of a Fetch API Request Object?

我正在尝试存储受 CSRF 保护的(查询字符串 + cookie)API POST 请求,以便在 Web 应用程序恢复在线时稍后重播。

为此,我想在 IndexedDB 中保存请求 Object(获取 API),但是 IDBObjectStore.put 失败并出现 DataCloneError "An object could not be cloned"。

请求 object 有一个简单的 JSON body,没有二进制数据,只有所有字符串。
这是服务工作者(网络工作者)环境中的运行。

结构化克隆算法无法克隆请求 Object 有什么原因吗? [Answer: Yes] 如果是这样,我 dehydrating/rehydrating 这个 object 代替结构化克隆的最佳选择是什么?

我真的很想避免 know/access 请求的个别属性 object。 我需要的请求部分是 url、headers、body 和 cookie(但同样,我不希望代码必须知道这些)。

提前感谢您的任何建议。

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

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

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

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