Ich habe diesem Beispiel gefolgt, um CORS in meiner API-Subdomain zu aktivieren, damit ich kann Anfragen von SwaggerUI an ihn senden. Dies ist die Ausgabe, die ich durch Ausführen von OPTIONEN in dieser Subdomain erhalte:
curl -i -X OPTIONS http://api.MYDOMAIN.com/v1/data/extraction
HTTP/1.1 204 No Content
Server: nginx/1.10.3 (Ubuntu)
Date: Wed, 18 Apr 2018 20:45:52 GMT
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-API-Key
Access-Control-Max-Age: 1728000
Content-Type: text/plain charset=UTF-8
Content-Length: 0
Ich weiß nicht, wohin ich gehen soll, um herauszufinden, warum in Chrome auf meiner Docs-Subdomain (derselbe DOMAIN.com-Server) gibt mir dies immer noch. Kann mir jemand raten, wohin ich schauen soll?
4 Antworten
Alles kam auf die Tatsache an, dass NGINX mehr_set_headers anstelle von add_header verwendet hatte (möglicherweise war es das NGINX hatte dieses Modul aktiviert) und danach funktionierte es mit einem der oben genannten Beispiele.
Ich hatte ein ähnliches Problem und konnte es nicht zum Laufen bringen. Dieses Setup hat endlich für mich funktioniert. https://gist.github.com/Stanback/7145487 So sieht es aus. Ich habe gerade $cors 'true'
gesetzt, um zu testen, ob es funktioniert hat. Es hat bei mir funktioniert. Dies ist alles im Bereich / location {...}
set $cors '';
if ($http_origin ~ '^https?://(localhost|www\.yourdomain\.com|www\.yourotherdomain\.com)') {
set $cors 'true';
}
if ($cors = 'true') {
add_header 'Access-Control-Allow-Origin' "$http_origin" always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With' always;
# required to be able to read Authorization header in frontend
#add_header 'Access-Control-Expose-Headers' 'Authorization' always;
}
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' "$http_origin" always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With' always;
# required to be able to read Authorization header in frontend
#add_header 'Access-Control-Expose-Headers' 'Authorization' always;
# Tell client that this pre-flight info is valid for 20 days
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
Möglicherweise möchten Sie einen Aufruf von api.MYDOMAIN.com/v1/data/extraction mit Curl und einem CORS-Ursprungsheader testen.
curl -i -X POST -H "Origin: http://docs.whatever.com" \
--verbose http://api.MYDOMAIN.com/v1/data/extraction
Die Antwort sollte mit dem Header zurückkommen:
Zugriffskontrolle-Zulassen-Ursprung: *
Wenn dieser Header nicht mit der Antwort zurückkommt, gibt Chrome einen Fehler aus, wie Sie ihn gesehen haben.
P.S. In dem Fehler wird erwähnt, dass Nginx mit einem 404 geantwortet hat, was möglicherweise etwas damit zu tun hat.
Das Problem könnte sein, dass Access-Control-Allow-Origin: *
und Access-Control-Allow-Credentials: true
inkompatibel sind. Wenn Sie Anmeldeinformationen übergeben möchten, müssen Sie mit Access-Control-Allow-Origin: {value-of-Origin-request-header}
und {{X3} antworten. }.
Verwandte Fragen
Neue Fragen
nginx
Nginx ("Engine x") ist ein Webserver, Reverse Proxy, TCP Stream Proxy und Mail Proxy, der unter einer BSD-ähnlichen Lizenz veröffentlicht wird.