appgyver 的 CORS 问题?

Posted

技术标签:

【中文标题】appgyver 的 CORS 问题?【英文标题】:CORS issue with appgyver? 【发布时间】:2015-06-29 08:23:45 【问题描述】:

我将 Angular 与 AppGyver 套件一起用于一个简单的 CRUD 应用程序。在我部署到云之前,我的 GET 和 POST 请求对我的远程 API(php REST 服务器)运行良好。从那里,PHP 永远不会真正获取 POST 数据。

我正在使用 nginx 中的自定义标头打开 CORS 访问

在我的服务器上运行 tcpdump 我发现在部署到云之前和之后发送的标头存在这些差异

ios SIMULATOR::: WORKS----
Content-Length: 26
Accept: application/json, text/plain, */*
Content-Type: application/json


DEPLOY TO CLOUD::: DOESN'T------
Access-Control-Request-Method: POST
Accept: */*
Access-Control-Request-Headers: accept, origin, content-type
Content-Length: 0

我猜这是我看不到的 CORS 问题...非常令人沮丧!

(也尝试使用签名的 SSL 证书而不是直接的 HTTP,没有变化)

我的 NGINX 标头:

add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Key,accept,origin,content-type,X-Requested-With,steroidsAppId,steroidsApiKey,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

add_header "Access-Control-Request-Method" "POST";
add_header "Access-Control-Allow-Credentials" true;

【问题讨论】:

你的应用需要认证吗? 我正在对应用程序的未经身份验证的部分进行这些测试 向服务器发送 POST 请求时得到的 https 状态码是什么?你可以使用 Postman Chrome 扩展来测试你的 API。还在这里发布带有响应头的请求头,这将有助于了解服务器问题。 【参考方案1】:

我设法弄明白了。没有费心去完全理解 CORS 是我的错。

然而,AppGyver 的人提到,当应用在本地测试并部署到云端时,会发送相同的标头,但情况似乎并非如此......

通过查看我的 NGINX 日志,我注意到在使用 OPTIONS 动词的每个请求之前执行了“预检”检查。一旦部署到云端,第二个请求就被终止了。我用这个配置打开了访问权限

https://michielkalkman.com/snippets/nginx-cors-open-configuration.html

【讨论】:

【参考方案2】:

如果您为 REST 应用程序使用实时服务器,并且遇到了 CORS 问题。我建议您使用 Ionic 的代理服务器来完成您的所有请求。您不会在任何 OPTION 请求等中运行。

检查this 滚动到“高级服务选项”,然后到“服务代理”

【讨论】:

以上是关于appgyver 的 CORS 问题?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止在PhoneGap中双击移动滚动?

Steroids.js/PhoneGap facebook 登录错误 ios

启用 CORS 时出现 Spring/Angular CORS 问题 [重复]

即使在设置 CORS 标头和服务器响应之后,Angular 和 laravel 的 CORS 问题[重复]

owin cors 或 web api cors

缺少 CORS 400 标头(以及其他问题)