我有问题,让我的离子应用程序发布到我的API。在我的api上,我设置了以下标头:
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type");
header("Access-Control-Allow-Methods: GET,PUT,POST,DELETE,OPTIONS");
当从Postman或实际网站发帖时,一切正常,我看到这些头文件返回,但一旦我打开我的应用程序并发送请求,它就不再起作用。
GET请求工作正常,只是POST请求被破坏了。我使用以下内容在我的应用程序上发送post请求:
/**
* Post to the API
* @param path Where to go
* @param params What to send
*/
private post(path, params): Promise<any> {
return this.http
.post(this.apiUrl + path, params)
.toPromise()
.then(r => r.json());
}
在我的ionic应用程序中,我得到以下错误
Failed to load resource: Preflight response is not successful
XMLHttpRequest cannot load https://mmcalc.com/api/calculate. Preflight response is not successful
我已经为此绞尽脑汁快15个小时了,我不明白为什么它行不通。
发布于 2018-06-10 10:29:10
解决方案很简单,但不是很明显,我只需要在我的API上设置适当的头文件。This文章为我解决了这个问题,而且非常简单。
# Always set these headers.
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
# Added a rewrite to respond with a 200 SUCCESS on every OPTIONS request.
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
发布于 2018-06-10 10:26:19
如果你只在iOS中遇到这个问题,那么这听起来像是WKWebView的问题
https://ionicframework.com/docs/wkwebview/
当服务器收到OPTIONS请求时,它的响应是什么?
我将确保来自OPTIONS请求的响应包含WKWEBView期望的标头,否则将阻止代码进行调用。
发布于 2018-06-10 01:02:43
印前检查请求使用OPTIONS请求方法。您应该确保您的API端点为OPTIONS请求方法返回一个成功的状态代码,并且响应还应该包括您前面提到的CORS标头。GET请求可能正在工作,因为它们不需要预检请求。我猜在您的例子中,OPTIONS方法返回了一个错误的状态代码。
https://stackoverflow.com/questions/50775046
复制相似问题