Chrome 63似乎忽略或中断了worker-src CSP标头

时间:2018-01-17 10:27:24

标签: javascript google-chrome web-worker content-security-policy

错误

我正在开发几个使用网络工作者的应用程序,所有这些应用程序都使用最新的Chrome V63.0.3230.132打破了。

这是我在控制台上看到的错误消息:

  

[仅限报告]拒绝从“http://localhost:8080/d04af186322390d53036.worker.js”创建工作人员,因为它违反了以下内容安全策略指令:“worker-src'none'”。

我也注意到some other sites的行为方式相同。

显然,创造该工人的方式并不重要。 我在使用worker-loader的反应应用程序中尝试了它,但也在我手动创建的简单JS演示中。错误保持不变。

我尝试了什么

我已经准备好了所有CSP标头,并且使用the correct CSP entry更新了我的manifest.json文件,但无济于事。

所有其他浏览器都运行良好。

有人可以确认或解释这种行为吗?

2 个答案:

答案 0 :(得分:13)

更新:在这种情况下,问题是因为安装并启用了uMatrix插件而导致问题。即使插件关闭,问题仍然存在。因此,有两种方法可以解决这些令人困惑的错误:

  • 在浏览器的Extension / Plugins菜单中完全禁用uMatrix。使用内置"关闭" uMatrix中的按钮无济于事。
  • 放开它,忽略警告。

详情请见https://github.com/gorhill/uMatrix/issues/926#issuecomment-359905357

历史记录的初步回复。

Xceno ,您是否确认Chrome确实无法加载该工作人员?

我看到完全相同的错误,但是... SW确实有效。也许这只是来自Chrome的假阳性错误。

这是我的代码以及我在控制台中看到的内容

navigator.serviceWorker.register('/sw.js').then(function(registration) {
    console.log('ServiceWorker registration successful with scope: ', registration.scope);
    // ... some other code
}

控制台输出:

defer.js:36 [Report Only] Refused to create a worker from 'https://.../sw.js' because it violates the following Content Security Policy directive: "worker-src 'none'".
defer.js:37 ServiceWorker registration successful with scope:  https://.../

在我的情况下,SW实际上已成功安装并按设计工作。

答案 1 :(得分:1)

正如所承诺的 - 这是标题。我无法将它们作为评论。如您所见,我没有明确拥有CSP标头,唯一与安全相关的标题是x-content-type-optionsx-frame-options。就是这样。希望它有所帮助。

content-type: text/html; charset=UTF-8
cache-control: must-revalidate, no-cache, private
x-ua-compatible: IE=edge
content-language: en
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
expires: Sun, 19 Nov 1978 05:00:00 GMT
vary: Accept-Encoding
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server: cloudflare
cf-ray: 3e91b05aabb05540-ORD
content-encoding: br
x-firefox-spdy: h2