发出跨源请求时出现 SharedArrayBuffer 错误

Posted

技术标签:

【中文标题】发出跨源请求时出现 SharedArrayBuffer 错误【英文标题】:SharedArrayBuffer error showing up when making cross origin request 【发布时间】:2021-08-19 10:51:45 【问题描述】:

我们有一个本地开发环境 (localhost/),它与远程服务器 (api-dev.host.com) 上的开发 API 进行通信。

在最新的 Chrome 升级后,我在尝试从 localhost 与远程服务器通信时收到以下控制台错误:

[Deprecation] SharedArrayBuffer will require cross-origin isolation as of M92, around July 2021. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details.

虽然错误中的链接确实显示了一些信息,但我不清楚如何解决此问题。 有没有办法从后端解决这个问题?任何答案将不胜感激。

【问题讨论】:

链接中有什么不清楚的地方?很难不只是解释那里所说的话:从您的服务器发送 COOP 和 COEP 标头以使您的页面cross-origin isolated。 我已经尝试过了,但没有任何运气。不幸的是,我还不清楚应该设置什么类型的标题。 【参考方案1】:

根据错误消息中的link,这是由于 Chrome v92 中实施了一项新的安全功能。

Chrome v92 现在需要 Cross-Origin-Resource-Policy 标头才能在两个或多个来源之间共享资源。我假设您正在尝试使用由 api-dev.host.com 设置的 cookie 或其他资源,因此您需要实现标头或将 CORS 配置设置为 Access-Control-Allow-Origin: *

如果您没有将 Access-Control-Allow-Origin 设置为 *,您可以使用以下 nginx 配置设置 Cross-Origin-Resource-Policy 标头:

add_header Cross-Origin-Resource-Policy 'cross-origin' always;

标头有多个不同的值,但 cross-origin 将允许您访问源之间的资源(localhostapi-dev.host.com 是不同的源)。

请注意,您可能有SameSite=Lax 或其他配置。为了访问应该由远程服务器设置的cookie以及Cross-Origin-Resource-Policy,您需要具有以下cookie配置(您可以检查您的cookieSameSite配置here):

SameSite=None; Secure;

假设您尝试访问由单独来源的远程服务器设置的 cookie 并且没有将 Access-Control-Allow-Origin 设置为 *,这应该可以工作。

【讨论】:

以上是关于发出跨源请求时出现 SharedArrayBuffer 错误的主要内容,如果未能解决你的问题,请参考以下文章

发出获取请求时出现多个问号

发出 Ajax POST 请求时出现“parseerror”

发出 HTTP 请求时出现跨域错误

发出帖子请求时出现Vuejs axios错误

从 html 调用本地节点服务时出现跨源错误

使用 axios 发出请求时出现 MethodNotAllowedHttpException(流明)