Я использую Angular с пакетом AppGyver для простого приложения CRUD. Мои запросы GET и POST нормально работали с моим удаленным API (PHP REST Server), пока я не развернул в облаке. Оттуда PHP никогда не получает данные POST.
Я открываю доступ к CORS с помощью пользовательских заголовков в NGINX
Запустив tcpdump на моем сервере, я обнаружил эти различия в заголовках, отправляемых до и после развертывания в облаке.
IOS SIMULATOR::: WORKS----
Content-Length: 26
Accept: application/json, text/plain, */*
Content-Type: application/jsonDEPLOY 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;
Мне удалось это выяснить. Не пытаясь полностью понять CORS, я виноват.
Однако ребята из AppGyver упомянули, что те же самые заголовки отправляются, когда приложение тестируется локально и развертывается в облаке, однако это не так …
Наблюдая за журналами NGINX, я заметил, что перед каждым запросом выполнялась проверка «перед полетом» с использованием глагола OPTIONS. После развертывания в облаке второй запрос был прерван. Я использовал этот конфиг, чтобы открыть доступ
https://michielkalkman.com/snippets/nginx-cors-open-configuration.html
Если вы используете работающий сервер для приложения REST и сталкиваетесь с проблемами CORS. Я бы посоветовал вам использовать прокси-сервер Ionic для выполнения всех ваших запросов. Вы не будете работать в любом запросе OPTION и т. Д. И т. Д.
Проверьте этот Выделите «Дополнительные параметры обслуживания», а затем «Сервисные прокси».