4

我正在将 SharedArrayBuffer 用于其中一个 webapp 中的一些功能。在 Chrome 版本 92 上,我已按照此处的说明启用跨源隔离,并将以下标题添加到根页面和wasm文件。

Cross-Origin-Resource-Policy: cross-origin
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

之后wasm文件被成功加载。

但现在我无法添加ReCaptchaV2。获取主脚本的第一个请求成功https://www.google.com/recaptcha/api.js...,但随后的 iframe 加载https://www.google.com/recaptcha/api2/anchor...url 被 Chrome 阻止。(原因This resource needs Cross-Origin-Resource-Policy: same-site/cross-origin header:)

暂时避免此问题的一种方法可能是从 Chrome 获取令牌,以SharedBufferArray通过获取试用令牌并使用它来允许使用。参考https://developer.chrome.com/blog/enabling-shared-array-buffer/#origin-trial。但这可能不是一个可扩展的事情,因为我有几个来源要处理。

有没有其他方法可以将 ReCaptcha 与跨源隔离(COEP 标头)一起使用?

4

1 回答 1

0

SharedArrayBuffer目前在 Firefox 79+ 中受支持,并将在 Android Chrome 88 中提供。但是,它仅适用于跨域隔离的页面。 SharedArrayBuffer目前在桌面 Chrome 中可用,但从 Chrome 92 开始,它将仅限于跨域隔离页面。如果您认为无法及时进行此更改,您可以注册一个原始试用版,以至少在 Chrome 96 之前保留当前行为。

如果您打算启用跨域隔离以继续使用,SharedArrayBuffer请评估这将对您网站上的其他跨域元素(例如广告展示位置)产生的影响。检查是否SharedArrayBuffer被您的任何第三方资源用于了解影响和指导。

您可以通过使用以下标头提供页面来隔离页面跨域:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

执行此操作后,您的页面将无法加载跨域内容,除非资源通过Cross-Origin-Resource-Policy标头或 CORS 标头(Access-Control-Allow-*等​​等)明确允许它。

还有一个报告 API,因此您可以收集有关因Cross-Origin-Embedder-Policy和 而失败的请求的数据Cross-Origin-Opener-Policy

如果您认为无法及时对 Chrome 92 进行这些更改,您可以注册原始试用版以至少在 Chrome 96 之前保留当前桌面 Chrome 行为。

于 2021-10-15T13:20:05.897 回答