chrome csp阻止了浏览器同步

Tom*_*mer 3 google-chrome content-security-policy gulp browser-sync

我有一个运行浏览器同步的任务。

var options = {
        proxy :          'localhost:9000/html' ,
        port :           3000 ,
        files :          [
            config.root + config.srcPaths.htmlBundle ,
            config.htmlRoot + 'main.css' ,
            '!' + config.htmlRoot + '**/*.scss'
        ] ,
        injectChanges :  false ,
        logFileChanges : true ,
        logPrefix :      'broserSync ->' ,
        notify :         true ,
        reloadDelay :    1000
    };
browserSync( options );
Run Code Online (Sandbox Code Playgroud)

browsersync会检测到更改并尝试注入更改,但chrome阻止此错误:

拒绝连接到“ ws:// localhost:3000 / browser-sync / socket.io /?EIO = 3&transport = websocket&sid = gOQQPSAc3RBJD2onAAAA”,因为它违反了以下内容安全策略指令:“ default-src'self'”。请注意,未明确设置“ connect-src”,因此将“ default-src”用作后备。

未捕获到的SecurityError:无法构造'WebSocket':拒绝连接到'ws:// localhost:3000 / browser-sync / socket.io /?EIO = 3&transport = websocket&sid = gOQQPSAc3RBJD2onAAAA',因为它违反了文档的内容安全策略。

我该如何克服这个问题?我可以关闭安全政策吗?

Mak*_*jer 6

或者,您可以在主html文件(例如index.html)中向内容安全策略添加规则,以接受来自浏览器同步的Web套接字连接。您可以通过添加做ws://localhost:*你的default-src,比如这样的:

<meta http-equiv="Content-Security-Policy"
      content="
        default-src 'self' ws://localhost:*">
Run Code Online (Sandbox Code Playgroud)

您还可以像这样指定确切的浏览器同步端口:

<meta http-equiv="Content-Security-Policy"
      content="
        default-src 'self' ws://localhost:3000">
Run Code Online (Sandbox Code Playgroud)

只记得在发布到生产服务器之前将其从策略中删除!!


Tom*_*mer 5

不确定这是否是最好的解决方案,但我最终做的是安装一个禁用 csp 的 chrome 插件:

https://chrome.google.com/webstore/detail/disable-content-security/ieelmcmcagommlceebfedjlakkhpden

如果有人有更好的解决方案,我会很高兴听到。