【问题标题】:Safari unable to create Worker from blob due to Content-Security-Policy issue由于 Content-Security-Policy 问题,Safari 无法从 blob 创建 Worker
【发布时间】:2021-07-09 17:41:03
【问题描述】:

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

const url = URL.createObjectURL(blob);
const worker = new Worker(url);

Safari 在控制台显示如下错误:

拒绝加载 blob:https://my.address.com/5fa7b5e6-cb10-4b7c-967b-e95cae58cd71,因为它既没有出现在内容安全策略的 child-src 指令中,也没有出现在 default-src 指令中。

我在页面上有以下 Content-Security-Policy 标签:

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

但看起来 Safari 忽略了它。我敢打赌,我尝试了所有可能的 SCP 指令组合(例如 worker-src、object-src、script-src、child-src 等)和源(*、blob:、'unsafe-eval'、'unsafe-inline '等)

欣赏任何想法!

注意事项

  1. 当我通过 http 在 Safari 中打开我的网页时,创建的 Worker 没有任何错误。问题是通过 https 打开时。
  2. Worker 在 Chrome、Firefox、Edge 中运行良好
  3. 我的页面上只有一个 Content-Security-Policy 标签
  4. 在 Safari 中检查 Http 响应标头时,它们看起来不错

【问题讨论】:

标签: safari blob web-worker content-security-policy


【解决方案1】:

Safari does not support worker-src 指令(v 12 已测试)并忽略它,检查控制台是否有 Unrecognized Content Security Policy directive 'worker-src' 消息。

worker-src 的后备链是:child-src -> script-src -> default-src,因此要支持 Safari,您必须使用 child-srcworker-src 相同的规则。 child-src blob:works in Safari(按“blob:”按钮查看)。

消息because it appears in neither the child-src directive nor the default-src directive of the Content Security Policy 不清楚。您是否已经有 child-src / default-src 以及策略中的一些规则?
因为&lt;meta http-equiv="Content-Security-Policy" content="worker-src 'self' blob:"&gt; 只是被 Safari 忽略并且不应该阻止工作人员。

【讨论】:

  • 确实,我在控制台“无法识别的内容安全策略指令'worker-src'”中有这个消息,我之前没有足够关注它。是的,我在 http 响应标头中设置了“default-src”(没有 blob 规则)。它应该解释我的问题的原因。当我将 child-src 添加到元标记时,没有任何改变。这应该是因为 http 响应标头优先于元标记规则。因此,我将 child-src 添加到响应标头中,它解决了我的问题?
猜你喜欢
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
  • 2019-07-09
  • 2019-02-16
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 2017-05-25
相关资源
最近更新 更多