情况:被content-security-policy元标签阻止的phonegap serve
自动加载
添加内容安全策略防止自动重新加载phonegap serve
实用程序。这是建立在cordova serve
之上,但自动重新加载文件编辑应用程序。在index.html
中注入socket.io
起作用。我应该在我的CSP元标签中指定什么,以允许套接字连接到我的笔记本电脑。
这是我当前的CSP元标签:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' 192.168.0.100 * ws:* ; connect-src ws://192.168.0.100 ws:*">
但是打开时,设备一直显示"连接到设备",设备上没有收到任何事件
还请注意,它开始移除这个元标签,这意味着cordova-plugin-whitelist
可能不会阻止它。
要将web套接字添加到安全策略中,请将web套接字协议(ws:)添加到connect-src指令中。
connect-src 'self' ws:;
可选地,您可以将ws:协议添加到default-src并忽略connect-src。下面是一个有用的示例,它支持大多数本地开发需求,同时仍然提供有用的安全约束。
<meta http-equiv="Content-Security-Policy"
content="default-src 'self' data: gap: ws: ssl.gstatic.com 'unsafe-inline';">
内容安全策略的文档非常好,而且很容易阅读。
如果你的websocket在同一主机/端口上,那么connect-src 'self'
或default-src 'self'
应该是足够的-假设浏览器已经实现了自https://github.com/w3c/webappsec-csp/issues/7 (PR)中CSP规范更改以来的更改。
我有一个类似的问题。这将影响Cordova 5.x.x。参见Nic Raboy的博客文章https://blog.nraboy.com/2015/05/whitelist-external-resources-for-use-in-ionic-framework/
我不得不稍微调整一下meta标签来让我的websocket也连接起来。
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'">