Ответ предполета не успешен с правильными заголовками - PullRequest
0 голосов
/ 09 июня 2018

У меня проблема с переносом моего ионного приложения в POST для моего API.На моем API я установил следующие заголовки:

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

При отправке сообщений из Почтальона или реального веб-сайта все работает так, как ожидалось, и я вижу, что эти заголовки возвращаются, но как только я открываю свое приложение и отправляю запросбольше не работает.

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());
 }

Я получаю следующую ошибку внутри моего ионного приложения

Failed to load resource: Preflight response is not successful
XMLHttpRequest cannot load https://mmcalc.com/api/calculate. Preflight response is not successful

Я потянул за волосыэто в течение почти 15 часов, я не понимаю, почему это не сработает.

Ответы [ 3 ]

0 голосов
/ 10 июня 2018

Если проблема возникает только в iOS, то это похоже на проблему с WKWebView

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

Когда сервер получает запрос OPTIONS, что он отвечает?

Я бы удостоверился, что ответ на запрос OPTIONS содержит заголовки, ожидаемые WKWEBView, иначе это предотвратит выполнение кода кодом.

0 голосов
/ 10 июня 2018

Решение было очень простым, но не очень очевидным, мне просто нужно было установить правильные заголовки в моем API. Эта статья решила проблему для меня и была очень простой.

# 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]
0 голосов
/ 09 июня 2018

предварительный запрос использует метод запроса OPTIONS.Вы должны убедиться, что ваша конечная точка API возвращает успешный код состояния для метода запроса OPTIONS, и ответ должен также включать заголовки CORS, которые вы упомянули выше.GET-запросы, вероятно, работают, потому что им не нужен предварительный запрос.Я полагаю, что в вашем случае метод OPTIONS возвращает неправильный код состояния.

...