可以/应该HTML5 Web Workers使用CORS进行跨域起源吗?

JSc*_*ott 10 javascript html5 web-worker cors

在创建依赖于Web worker的托管API时,我遇到了一个有趣的问题.我希望得到一些社区反馈.

我的服务器使用适当的CORS头设置,以提供工作者JS文件,并可以使用XMLHttpRequest对象检索.但是,当URL被赋予new Worker()它无法构建时,引用原点是问题.这似乎是Firefox和Chrome上的一个问题.亲自检查一下,我的解决方法,在这里:http://jsfiddle.net/5ag42hb1/11/

这不是奇怪的行为吗?Mozilla文档说Web Workers 必须遵守同源策略并使用CORS来允许跨源访问.

小提琴有一个解决方法,将文件存储在blob中,然后将其传递给worker.虽然看起来不太理想,但却引入了许多不必要的复杂性.谁能想到更清洁的解决方案?是否有良好的渠道可以正确实施?

JSc*_*ott 9

我做了很多挖掘并询问了IRC频道.感谢Mozilla网络上的#developers中的人们,我得到了一些非常好的答案.希望这将有助于处理与我相同情况的任何人.

总而言之,HTML规范概述了运行new Worker('http://remoteorigin.com/worker.js')应该使用远程源的安全上下文来执行worker.有些东西就像CORS,但并不完全是因为它是执行权而不是阅读权.

那么为什么现在不是这样呢?因为浏览器还没有实现完整的规范.把它作为值得期待的东西.

在那之前,实际上有2个解决方法.我概述了上面的blob方法,但我们也可以使用importScripts().如果你不能修改Worker本身,你可能会创建一个shell Worker,它只是实现你真正想要的Worker.

  • 看来2022年情况并没有太大改变。不幸的是,blob 解决方案不能在内容安全策略严格的环境中使用。我没有通过 importScripts 得到第二个解决方案。你能分享一个例子吗? (2认同)