Я получаю эту ошибку, используя ngResource для вызова REST API в Amazon Web Services:
XMLHttpRequest не может загрузить http://server.apiurl.com:8000/s/login?login=facebook . Ответ на запрос предварительной проверки не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Поэтому происхождение ' http: // localhost ' не разрешено. Ошибка 405
Обслуживание:
socialMarkt.factory('loginService', ['$resource', function($resource){
var apiAddress = "http://server.apiurl.com:8000/s/login/";
return $resource(apiAddress, { login:"facebook", access_token: "@access_token" ,facebook_id: "@facebook_id" }, {
getUser: {method:'POST'}
});
}]);
контроллер:
[...]
loginService.getUser(JSON.stringify(fbObj)),
function(data){
console.log(data);
},
function(result) {
console.error('Error', result.status);
}
[...]
Я использую Chrome, и я не знаю, что еще нужно сделать, чтобы решить эту проблему. Я даже настроил сервер для приема заголовков от источника localhost
.
javascript
ajax
http
cors
http-status-code-405
Андре Мендес
источник
источник
Ответы:
Вы сталкиваетесь с проблемами CORS.
Есть несколько способов исправить / обойти это.
Более подробно, вы пытаетесь получить доступ к api.serverurl.com с локального хоста. Это точное определение междоменного запроса.
Выключив его просто для того, чтобы выполнить свою работу (ОК, если вы заходите на другие сайты с плохой безопасностью, вы можете использовать прокси-сервер, который заставляет ваш браузер думать, что все запросы поступают с локального хоста, когда на самом деле у вас есть локальный сервер, который затем вызывает удаленный сервер.
поэтому api.serverurl.com может стать localhost: 8000 / api, и ваш локальный nginx или другой прокси-сервер отправит в правильный пункт назначения.
Теперь по многочисленным просьбам, на 100% больше информации о CORS .... такой же прекрасный вкус!
И для downvoters .... в обход CORS это именно то, что показано для тех, кто просто изучает интерфейс. https://codecraft.tv/courses/angular/http/http-with-promises/
источник
Мой «API-сервер» является приложением PHP, поэтому для решения этой проблемы я нашел следующее решение:
Поместите строки в index.php
источник
Access-Control-Allow-Headers
.В веб-интерфейсе AspNetCore эта проблема была исправлена путем добавления «Microsoft.AspNetCore.Cors» (версия 1.1.1) и добавления указанных ниже изменений в файл Startup.cs.
а также
и надевая
[EnableCors("AllowAllHeaders")]
контроллер.источник
Есть некоторые оговорки, когда речь идет о CORS. Во-первых, он не допускает подстановочные знаки,
*
но не держите меня на этом, я где-то читал, и я не могу найти статью сейчас.Если вы делаете запросы из другого домена, вам нужно добавить заголовки разрешения источника.
Если вы делаете запросы , которые влияют на ресурсы сервера , как POST / PUT / PATCH, и если мим тип отличается от следующего
application/x-www-form-urlencoded
,multipart/form-data
илиtext/plain
браузер автоматически сделает предполетной OPTIONS запроса проверки с сервером , если это позволит его ,Таким образом, ваш API / сервер должен обрабатывать эти запросы OPTIONS соответственно, вы должны ответить соответствующим образом,
access control headers
и код статуса ответа http должен быть200
.Заголовки должны быть примерно такими, настройте их под свои нужды:
Заголовок max-age важен, в моем случае он не будет работать без него, я думаю, браузеру нужна информация о том, как долго действительны «права доступа».
Кроме того, если вы делаете, например,
POST
запрос сapplication/json
mime из другого домена, вам также необходимо добавить ранее упомянутый заголовок разрешения источника, так что это будет выглядеть так:Когда пре-полет пройдет успешно и получит всю необходимую информацию, ваш фактический запрос будет выполнен.
Вообще говоря, все
Access-Control
заголовки, которые запрашиваются в первоначальном или предполетном запросе, должны быть указаны в ответе, чтобы он работал.Вот хороший пример в документации по MDN по этой ссылке , и вы также должны проверить этот пост
источник
.AllowCredentials()
. После добавления.AllowCredentials()
все заработало.Источник: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
Вы должны отправить Access-Control-Allow-Origin: * HTTP-заголовок со стороны вашего сервера.
Если вы используете Apache в качестве HTTP-сервера, вы можете добавить его в файл конфигурации Apache следующим образом:
Mod_headers по умолчанию включен в Apache, однако вы можете убедиться, что он включен, запустив:
источник
/etc/apache2/apache2.conf
Если вы пишете Chrome-расширение
Вы должны добавить в
manifest.json
разрешения для вашего домена (ов).источник
Если вы используете сервер IIS случайно. Вы можете установить заголовки ниже в опции заголовков HTTP-запроса.
с этим все сообщения, получить и т. д., будет работать нормально.
источник
Для python flask server вы можете использовать плагин flask-cors для включения междоменных запросов.
Смотрите: https://flask-cors.readthedocs.io/en/latest/
источник
В PHP вы можете добавить заголовки:
источник
header ("Access-Control-Expose-Headers: Content-Length, X-JSON");
Чтобы устранить проблемы перекрестных исходных запросов в приложении Node JS:
И просто добавьте строки ниже к
app.js
источник
В моем конфигурационном файле Apache VirtualHost я добавил следующие строки:
источник
Для тех, кто использует Lambda Integrated Proxy с API-шлюзом . Вам необходимо настроить лямбда-функцию так, как если бы вы отправляли ей запросы напрямую, то есть функция должна правильно настраивать заголовки ответа. (Если вы используете пользовательские лямбда-функции, это будет обрабатываться шлюзом API.)
источник
Я думаю, что отключение CORS из Chrome не очень хороший способ , потому что, если вы используете его в ионном режиме, то, безусловно, в Mobile Build проблема снова возникнет.
Так что лучше исправить в своем бэкэнде.
Прежде всего, в заголовке нужно установить
И если API ведет себя как GET и POST, то и в вашем заголовке
источник
Чаще всего причиной этой ошибки может быть то, что API хоста сопоставил запрос с методом http (например, PUT), а клиент API вызывает API, используя другой метод http (например, POST или GET).
источник
PUT
Наша команда иногда видит это, используя Vue, axios и C # WebApi. Добавление атрибута маршрута в конечную точку, к которой вы пытаетесь попасть, исправляет его для нас.
источник
Я столкнулся с этой проблемой, когда DNS-сервер был установлен на 8.8.8.8 (Google's). На самом деле проблема была в роутере, мое приложение пыталось соединиться с сервером через гугл, а не локально (для моего конкретного случая). Я удалил 8.8.8.8, и это решило проблему. Я знаю, что эти проблемы решаются настройками CORS, но, возможно, у кого-то будут такие же проблемы, как у меня
источник
Я использую AWS SDK для загрузки, потратив некоторое время на поиск в Интернете, я наткнулся на эту тему. благодаря @lsimoneau 45581857 выясняется, что происходит то же самое. Я просто направил свой URL-адрес запроса на регион, добавив параметр региона, и это сработало.
источник
Автономные дистрибутивы GeoServer включают сервер приложений Jetty. Включите общий доступ к ресурсам между источниками (CORS), чтобы приложения JavaScript за пределами вашего собственного домена могли использовать GeoServer.
Раскомментируйте следующее
<filter>
и<filter-mapping>
от webapps / geoserver / WEB-INF / web.xml:источник
Эту проблему легко решить всего за несколько шагов, не беспокоясь ни о чем. Пожалуйста, следуйте инструкциям, чтобы решить эту проблему.
источник
То, что очень легко пропустить ...
В обозревателе решений щелкните правой кнопкой мыши api-проект. В окне свойств установите «Анонимная аутентификация» на Включено !!!
источник
Отключите безопасность Chrome. Создайте ярлык Chrome правой кнопкой мыши -> Свойства -> Цель, вставьте этот «C: \ Program Files (x86) \ Google \ Chrome \ Application \ chrome.exe» --disable-web-security --user -data-DIR = "C: / chromedev"
источник