iOS拒绝连接,因为它既不出现在connect src指令中,也不出现在内容安全策略的默认src指令中

iOS拒绝连接,因为它既不出现在connect src指令中,也不出现在内容安全策略的默认src指令中,ios,cordova,security,webkit,content-security-policy,Ios,Cordova,Security,Webkit,Content Security Policy,因此,我制作了一个phonegap应用程序,它使用socket.io做一些事情。 我有以下内容安全策略(CSP) 以及: 使用相同CSP的同一应用程序在Chrome/Android上运行良好,但在Safari/iOS上运行不好。 我认为这与: 似乎出现了很多资源: 为什么说“拒绝连接到”URL以ws开头:“因为它既不出现在内容安全策略的connect src指令中,也不出现在内容安全策略的default src指令中,即使两者都提到了它 好吧,safari/iOS在这方面比chrome

因此,我制作了一个phonegap应用程序,它使用socket.io做一些事情。
我有以下内容安全策略(CSP)

以及:

使用相同CSP的同一应用程序在Chrome/Android上运行良好,但在Safari/iOS上运行不好。
我认为这与:

似乎出现了很多资源:

为什么说“拒绝连接到”URL以ws开头:“因为它既不出现在内容安全策略的connect src指令中,也不出现在内容安全策略的default src指令中,即使两者都提到了它

好吧,safari/iOS在这方面比chrome/Android更严格,一切都很好,但它仍然需要让我允许连接通过。这对应用程序开发人员来说真的很沮丧!解决方案

编辑:
在bugs.webkit.org上做了一个bug报告:

好吧,这有点愚蠢,但好吧,我会保留这个答案,这样未来的人们可以看到它,而不必处理这个问题

我做错的是:
我的头如下:

<head>
    <meta charset="utf-8" />
    <!--<meta http-equiv="Content-Security-Policy" 
    content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />-->
    <meta http-equiv="Content-Security-Policy" content="
                            default-src * data: blob: ws: wss: gap://ready file://*;
                            style-src * 'unsafe-inline'; 
                            script-src * 'unsafe-inline' 'unsafe-eval';
                            connect-src * ws: wss:;">
    <meta name="format-detection" content="telephone=no" />
    <meta name="msapplication-tap-highlight" content="no" />
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" />
    <meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src"/>
    <link rel="stylesheet" type="text/css" href="css/reset.css" />
    <link rel="stylesheet" type="text/css" href="css/index.css" />
    <title>Kerst app!</title>
</head>

克斯特应用程序!
我没有注意到我有两次“内容安全策略”元标记
我知道,对吧?复制导致iOS只取最新的一个,更严格。删除了复制,第一次工作

最后是corect代码

<head>
    <meta charset="utf-8" />
    <!--<meta http-equiv="Content-Security-Policy" 
    content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />-->
    <meta http-equiv="Content-Security-Policy" content="
                            default-src * data: blob: ws: wss: gap://ready file://*;
                            style-src * 'unsafe-inline'; 
                            script-src * 'unsafe-inline' 'unsafe-eval';
                            connect-src * ws: wss:;">
    <meta name="format-detection" content="telephone=no" />
    <meta name="msapplication-tap-highlight" content="no" />
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" />
    <link rel="stylesheet" type="text/css" href="css/reset.css" />
    <link rel="stylesheet" type="text/css" href="css/index.css" />
    <title>Kerst app!</title>
</head>

克斯特应用程序!

也有同样的问题,说“拒绝连接到blob:[…],因为它没有出现在内容安全策略的connect src指令中。”

事实证明(与您不同),我没有两个内容安全策略实例,而是两个“connect src”实例,第二个实例缺少“blob:”


非常感谢您将我推向正确的方向!

我只添加了第一个“内容安全策略”“而且没有两次添加meta标记,这对我来说很好,解决了摄像头在iOS中无法打开的问题。非常感谢!你和这个家伙:周五下午救了我一天,因为定位服务没有在iOS 12上运行。添加gap://ready 解决了这个问题不是专家,但我相信不是它读的是最新的一行,而是它读的是最严格的一行,碰巧它是最后一行
SecurityError (DOM Exception 18): The operation is insecure.
<head>
    <meta charset="utf-8" />
    <!--<meta http-equiv="Content-Security-Policy" 
    content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />-->
    <meta http-equiv="Content-Security-Policy" content="
                            default-src * data: blob: ws: wss: gap://ready file://*;
                            style-src * 'unsafe-inline'; 
                            script-src * 'unsafe-inline' 'unsafe-eval';
                            connect-src * ws: wss:;">
    <meta name="format-detection" content="telephone=no" />
    <meta name="msapplication-tap-highlight" content="no" />
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" />
    <meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src"/>
    <link rel="stylesheet" type="text/css" href="css/reset.css" />
    <link rel="stylesheet" type="text/css" href="css/index.css" />
    <title>Kerst app!</title>
</head>
<head>
    <meta charset="utf-8" />
    <!--<meta http-equiv="Content-Security-Policy" 
    content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />-->
    <meta http-equiv="Content-Security-Policy" content="
                            default-src * data: blob: ws: wss: gap://ready file://*;
                            style-src * 'unsafe-inline'; 
                            script-src * 'unsafe-inline' 'unsafe-eval';
                            connect-src * ws: wss:;">
    <meta name="format-detection" content="telephone=no" />
    <meta name="msapplication-tap-highlight" content="no" />
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" />
    <link rel="stylesheet" type="text/css" href="css/reset.css" />
    <link rel="stylesheet" type="text/css" href="css/index.css" />
    <title>Kerst app!</title>
</head>