Получавам тази грешка, като използвам ngResource за извикване на REST API в Amazon Web Services:
XMLHttpRequest не може да се зареди http://server.apiurl.com:8000/s/login?login=facebook. Response to preflight request doesn't pass access control check: No
'Access-Control-Allow-Origin' хедърът присъства в искания ресурс. Поради това не е разрешен достъпът до 'http://localhost' Origin. Error 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
.
Срещате проблеми с CORS.
Има няколко начина за отстраняване/обход на проблема.
По-точно казано, опитвате се да получите достъп до api.serverurl.com от localhost. Това е точното определение за заявка между домейни.
Като го изключите само за да си свършите работата (добре, поставяте лоша сигурност за вас, ако посещавате други сайтове и просто изхвърляте кутията на пътя), можете да използвате прокси, което кара браузъра ви да мисли, че всички заявки идват от локалния хост, докато в действителност имате локален сървър, който след това се обажда на отдалечения сървър.
Така api.serverurl.com може да се превърне в localhost:8000/api, а вашият местен nginx или друг прокси сървър ще изпрати до правилната дестинация.
Сега, по популярно търсене, 100% повече информация за CORS....също страхотен вкус!
И за даунвотъритеһттр://.... заобикалянето на CORS е точно това, което е показано за тези, които просто учат фронт енда. https://codecraft.tv/courses/angular/http/http-with-promises/
Моят "API сървър" е PHP приложение, така че за решаване на този проблем намерих следното решение да работи:
Поставете редовете в index.php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
За сървъра flask на питон можете да използвате приставката flask-cors, за да разрешите заявките между домейни.