Chrome中Atomics与SharedArrayBuffer未默认启用的原因咨询
嘿,这个问题背后其实是Chrome后来调整了安全策略导致的,我给你理清楚来龙去脉:
安全风险驱动的策略变更:Chrome确实在60版本时默认启用了Atomics和SharedArrayBuffer,但没多久就发现这些特性可能被用来利用Spectre类的安全漏洞。所以从Chrome 67开始(包括你提到的65版本的部分分支、67 Canary测试版),Chrome默认关闭了这两个特性,以此降低浏览器的安全风险。
需要满足跨源隔离条件才能自动启用:如果想让Chrome在生产环境中自动启用这两个特性,你的页面必须配置两个关键的HTTP响应头:
Cross-Origin-Opener-Policy: same-origin(或者same-site、strict-origin,具体根据你的跨源需求选择):限制页面只能和同源的窗口/文档建立关联Cross-Origin-Embedder-Policy: require-corp:要求所有嵌入到页面的资源要么是同源的,要么带有合法的跨源许可(比如CORS头)
当页面满足这两个条件时,Chrome就会自动启用Atomics和SharedArrayBuffer,不需要手动去改flags。
Node.js默认启用的原因:Node.js的运行环境和浏览器完全不同,它没有浏览器那样的跨源安全限制场景,所以不需要额外的安全校验,因此Node.js 8.x及以后版本默认就开启了这两个特性。
本地测试的临时方案:如果只是本地开发测试,你可以通过
chrome://flags/#shared-array-buffer手动开启对应的标志,但这种方式不适合生产环境,生产环境一定要通过配置HTTP头来满足跨源隔离要求。
内容的提问来源于stack exchange,提问作者Jared Smith
相关产品推荐
相关产品推荐

