由于内容安全策略问题,Safari无法从blob创建工作进程

由于内容安全策略问题,Safari无法从blob创建工作进程,safari,blob,web-worker,content-security-policy,Safari,Blob,Web Worker,Content Security Policy,我正在尝试在我的网页上创建Worker: const url = URL.createObjectURL(blob); const worker = new Worker(url); Safari在控制台中显示以下错误: 拒绝加载blob:因为它既不出现在内容安全策略的子src指令中,也不出现在默认src指令中 我在页面上有以下内容安全策略标签: <meta http-equiv="Content-Security-Policy" content="work

我正在尝试在我的网页上创建Worker:

const url = URL.createObjectURL(blob);
const worker = new Worker(url);
Safari在控制台中显示以下错误:

拒绝加载blob:因为它既不出现在内容安全策略的子src指令中,也不出现在默认src指令中

我在页面上有以下内容安全策略标签:

<meta http-equiv="Content-Security-Policy" content="worker-src 'self' blob:">

但看来Safari忽略了这一点。我打赌我尝试了所有可能的SCP指令组合(例如worker src、object src、script src、child src等)和sources(*、blob:、‘safe eval’、‘safe inline’等)

感谢你的任何想法

注释

  • 当我通过http在Safari中打开我的网页时,创建的Worker没有任何错误。问题是当通过https打开时
  • Worker在Chrome、Firefox和Edge中运行良好
  • 我在页面上只有一个内容安全策略标签
  • 在Safari中检查Http响应头时,它们看起来不错
  • Safari
    worker src
    指令(测试了v12)并忽略它,请检查控制台中是否有
    无法识别的内容安全策略指令'worker src'
    消息

    工作者src
    的回退链是:
    子src
    ->
    脚本src
    ->
    默认src
    ,因此要支持Safari,您必须使用与
    工作者src
    相同的规则使用
    子src
    子src blob:
    (按“blob:”按钮查看)

    消息
    不清楚,因为它既不出现在内容安全策略的子src指令中,也不出现在默认src指令中。您是否已经有了策略中包含一些规则的
    子src
    /
    默认src

    因为Safari忽略了
    ,不应该阻止worker。

    事实上,我在控制台中有一条消息“Unrecognized Content Security Policy directive‘worker src’”,我以前没有对它给予足够的重视。是的,我在http响应头中设置了“默认src”(没有blob规则)。它应该解释我的问题的原因。当我将child src添加到meta标记时,没有任何更改。这应该是因为http响应头的优先级高于元标记规则。所以,我在响应头中添加了child src,它解决了我的问题