我正试图将Zoom Web Video SDK集成到现有的Web应用程序中,出于性能原因,SharedArray Buffer已成为一项要求,为了启用它,网站必须实现跨源隔离。我已经着手为NGINX添加了必要的配置,即:
add_header 'Cross-Origin-Embedder-Policy' 'require-corp';
add_header 'Cross-Origin-Opener-Policy' 'same-origin';
但当然,这对之前存在的和正在工作的场地的其余部分有连锁反应。Google API似乎不会再成功加载了。
我更改了index.html,将crossorgin属性添加到Google API脚本标记中,如下所示:
<script src="https://apis.google.com/js/platform.js" async defer crossorigin></script>
在我的javascript源代码中,我有(转述并降低复杂性以达到目的(:
gapi.load('client:auth2', function() {
gapi.client
.init({
client_id: 'MY-CLIENT-ID',
cookiepolicy: 'single_host_origin',
discoveryDocs: ['https://classroom.googleapis.com/$discovery/rest?version=v1'],
scope: 'profile email'
})
.then(() => console.log('init finished'))
.catch(e) => console.error('init failed', e));
});
在该代码中,gap和gap.client定义良好,但init调用从未完成(没有来自then或catch的控制台日志(。查看devtools中的网络选项卡,可以看到一个失败的GET请求:
https://content-classroom.googleapis.com/static/proxy.html?usegapi=1&。。还有一堆其他的东西,我不确定是否敏感,所以我省略了
当你深入到响应中时,它会显示:
若要从其他来源使用此资源,服务器需要在响应标头中指定跨来源资源策略:
- 跨来源资源策略:相同站点如果资源和文档来自同一站点,请选择此选项
- 跨来源资源策略:跨来源仅当包含此资源的任意网站没有强制执行安全风险
很明显,我无法控制谷歌服务器的功能,但有人能告诉我如何正确工作吗。这只会在我的NGINX配置在本文开始时发生更改时出错。
更新
我通过单独获取API的发现文档并将结果传递到gap.client.init方法而不是URL来解决这一问题。然而,虽然我在devtools的网络选项卡中不再得到上述结果,但我得到了奇怪/不一致的结果,比如";popup_closed_by_user";以及";popup_closed_browser";发生在响应我的GoogleAuth.signIn调用时。如果我从NGINX中删除了头,它就会再次像预期的那样运行。我不明白这是怎么回事。
https://web.dev/cross-origin-isolation-guide/#enable-跨原点隔离访问该链接并阅读。
它提到,弹出窗口行为目前受到启用解释您行为的标题的影响。
你必须通读一遍,然后自己决定这是否能解释你的问题。