Ich mache ein AngularJS-Projekt, jetzt unter http://localhost
mit einem Laravel-Backend unter http://api.localhost
, beide von einem Nginx-Server bedient.Laravel + AngularJS CORS funktioniert nicht
wenn ein $ http.post antrag, Winkel erste macht die CORS OPTIONS anrufen, und ich habe meine nginx-Server konfiguriert mit den richtigen Header zu reagieren:
location/{
add_header "Access-Control-Allow-Origin" "*";
add_header "Access-Control-Allow-Credentials" "true";
add_header "Access-Control-Allow-Methods" "GET,POST,DELETE,PUT,OPTIONS";
add_header "Access-Control-Allow-Headers" "Keep-Alive,User-Agent,If-Modified-Since,Cache-Control,Content-Type,Authorization";
add_header "Access-Control-Max-Age" "1728000";
if ($request_method = 'OPTIONS') {
return 204;
}
#try_files $uri $uri/ /index.html;
try_files $uri /index.php?$query_string;
}
location = /index.php {
add_header "Access-Control-Allow-Origin" "*";
add_header "Access-Control-Allow-Credentials" "true";
add_header "Access-Control-Allow-Methods" "GET,POST,DELETE,PUT,OPTIONS";
add_header "Access-Control-Allow-Headers" "Keep-Alive,User-Agent,If-Modified-Since,Cache-Control,Content-Type,Authorization";
add_header "Access-Control-Max-Age" "1728000";
if ($request_method = 'OPTIONS') {
return 204;
}
...
}
Mein Winkelmodul auch mit so konfiguriert ist, :
.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}])
Die OPTIONS-Aufruf kehrt wie erwartet:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Keep-Alive,User-Agent,If-Modified-Since,Cache-Control,Content-Type,Authorization
Access-Control-Allow-Methods:GET,POST,DELETE,PUT,OPTIONS
Access-Control-Allow-Origin:*
Access-Control-Max-Age:1728000
Connection:keep-alive
Date:Mon, 04 Nov 2013 02:14:16 GMT
Server:nginx/1.2.6 (Ubuntu)
Aber t er nachfolgender POST Anruf Ich mache nicht mit einem Status von ABGESAGT und Winkel wirft einen Fehler an die JS-Konsole:
`XMLHttpRequest cannot load http://api.localhost/users/accesstokens. Origin http://localhost is not allowed by Access-Control-Allow-Origin.`
ich spät in der Nacht aufgeblieben und bekam diese Arbeit, aber wenn ich heute wieder versucht, es war wieder um eins zu machen. Schlimmste Art von Problem!
Was tun?
EDIT: Ich habe das Problem gefunden, aber ich verstehe es immer noch nicht. Ich schaute auf meine Nginx-Zugriffsprotokolle und sah, dass die POST-Anfrage tatsächlich den Server erreichte, obwohl der Status CANCELLED war. Ich sah auch, dass die Antwort eine 401 war. Nachdem meine Anfrage korrekt war, war die Antwort 201. Immer noch derselbe CANCELED-Status. Aber als ich den Status auf 200 eingestellt habe, voila! Die Anfrage funktionierte wie beabsichtigt.
Gibt es einen Grund, warum AngularJS nur einen 200-Status in einer ursprungsübergreifenden Anforderung akzeptiert?
Version von Nginx? – alfonsodev
das gleiche Problem hier – pajooh