使用正确的header但预检响应不成功

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (719)

将ionic应用程序POST到API。在api上,设置了以下header:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type");
header("Access-Control-Allow-Methods: GET,PUT,POST,DELETE,OPTIONS");

在postman或实际网站发送POST时,一切都按预期运行,但是一旦打开应用程序并发送请求,它就不再有效了 。

GET请求工作正常,只是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
提问于
用户回答回答于

预检请求使用OPTIONS请求方法。您应该确保您的API端点为OPTIONS请求方法返回成功的状态代码,并且响应还应包括您在上面提到的CORS头。GET请求可能正在运行,因为他们不需要预先请求。我想在你的情况下,OPTIONS方法返回错误的状态代码。

用户回答回答于

如果您只是在iOS中遇到问题,那么这听起来像是WKWebView的问题

https://ionicframework.com/docs/wkwebview/

当服务器收到OPTIONS请求时,它会响应什么?

我会确保OPTIONS请求的响应包含WKWEBView期望的标头,否则它将阻止代码进行调用。

扫码关注云+社区

领取腾讯云代金券