Я пытаюсь сделать запрос $ http.post, но у меня есть следующая ошибка:
XMLHttpRequest не может загрузить https://mipage.com/examplephp. Поле заголовка запроса Content-Type не разрешено заголовками Access-Control-Allow-Headers в предполетном ответе.
Если я изменю $ http.post на $ http.get, запросите ответ сервера с JSON, так что.. Я думаю, что это не проблема CORS. Также я поставил прокси в ионный проект.
Это моя функция:
function obtenerSesion() {
debugger;
return $http.post(iniciarSesionUrl,
{params: {username: 'prueba123',password: 'prueba123'}}).then(function(response) {
canchas = response.data;
return canchas;
})
.catch(generarError);
}
Также сервер возвращает JSON с параметрами или без них, потому что я думал, что, возможно, проблема была $ _POST ["username"]; $ _POST [ "пароль"];
Но нет. Я жестко закодировал данные на сервере, так что... проблема в Angular JS
Можете ли вы помочь мне решить мою проблему? Благодарю!
XMLHttpRequest не может загрузить https://mipage.com/examplephp. Поле заголовка запроса Content-Type не разрешено заголовками Access-Control-Allow-Headers в предполетном ответе.
Если я изменю $ http.post на $ http.get, запросите ответ сервера с JSON, так что.. Я думаю, что это не проблема CORS. Также я поставил прокси в ионный проект.
Объяснение:
Когда вы делаете HTTP-запрос GET из объекта http: http.get(), передающего params, они добавляются в querystring, а поскольку запрос не имеет тела сообщения, угловой httpProvider удаляет заголовок Content-Type запроса.
Итак, ваши параметры $ http.get в querystring:
username=prueba123&password=prueba123
В противном случае для HTTP POST-запроса из объекта http http.post(), передающего объект params, они разбираются в json и вставляются в тело сообщения запроса, тогда httpProvider добавляет заголовок HTTP-запроса Content-Type: application/json.
Итак, ваши параметры $ http.post в теле сообщения запроса:
{"username":"prueba123","password":"prueba123"}
Это делается по умолчанию transformRequest функцией углового httpProvider
Как-то вы нарушаете политику CORS, тогда вам нужно настроить веб-сервер api или ваш api-сервер для обработки нарушения политики CORS, в частности, ваша ошибка возникает из-за отсутствия содержимого в Access-Control-Request -Отчетное поле ответа.
Возможное решение (в вашем конкретном случае)
Если вы запускаете приложение из локального с помощью ионного фреймворка, вам необходимо настроить файл ionic.config.json и добавить прокси-адрес того же адреса и порта, на котором размещено ваше приложение, поэтому вы не нарушаете политику CORS.
пример:
{
"name": "example project",
"app_id": "11ffxxxx",
//etc etc..
"proxies": [
{
"path": "/api",
"proxyUrl": "http://192.168.1.152:9083/api"
}
]
}
наконец, в вашем угловом приложении вам необходимо правильно настроить API-конечную точку при запуске из локального:
function obtenerSesion() {
debugger;
return $http.post("/api",
{params: {username: 'prueba123',password: 'prueba123'}}).then(function(response) {
canchas = response.data;
return canchas;
})
.catch(generarError);
}
Я советую вам автоматизировать этот процесс, используя javascript task runner (gulp, grunt)
Сервер, на который отправляется запрос POST, должен включать в свой ответ заголовки Access-Control-Allow-Headers. Завершение их в ваш клиент не влияет.
До сервера указывается, принимает ли он запросы на кросс-поиск, поэтому клиент не может решить для себя, если он разрешает CORS.
Здесь объясняется в этой теме
Content-Type
(который Angular устанавливает дляapplication/json
для запроса POST), он должен быть частью списка разрешенных заголовков.