我已经基于Cordova / ionic的相同代码构建了40多个应用程序,并且运行良好。然后,我更新了本地环境(最新的npm,node,ionic,cordova)。当我在本地浏览器(离子服务)中测试我的应用程序时,它们运行良好。当我构建它们并将其部署到测试设备上时,对MY服务器的所有ajax调用都会失败,并显示以下信息:
Access Control Origin Cannot contain more than one origin.
对其他2个API域的ajax调用也可以。我没有更改服务器上的任何内容,较旧的二进制文件仍然可以正常工作。当我检查Safari开发者面板时,它显示该错误,但表示没有从服务器返回标头信息,因此我无法了解拒绝哪些标头。我在PHP服务器代码上进行了全局搜索,我看到的只是标准访问标头。
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
我的index.html也有meta标签
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline' 'unsafe-eval' *; style-src 'self' 'unsafe-inline' *">
Config.xml包含
<access origin="*" />
<plugin name="cordova-plugin-whitelist" spec="1.0.0" />
我没有更改服务器上的任何内容(其他未升级的xcode二进制文件没有此问题),因此错误必须来自升级代码中的内部ajax代理解析。
我还能尝试什么?我如何看待发现和拒绝了哪些原始标头?
答案 0 :(得分:0)
我不完全理解为什么这会立即触发错误,但是直到我在服务器上的/ home目录中找到一个.htaccess文件,并带有字体的访问标头指令。
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
我对此进行了评论,现在我的ajax调用正在使用更新的代码。