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)  CORS error gibt mir dies immer noch. Kann mir jemand raten, wohin ich schauen soll?

1
Daniel Protopopov 18 Apr. 2018 im 23:51

4 Antworten

Beste Antwort

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.

2
Daniel Protopopov 25 Apr. 2018 im 06:25

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;
    }
2
Reginol_Blindhop 18 Apr. 2018 im 21:04

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.

0
Jack Davidson 18 Apr. 2018 im 21:08

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. }.

0
roryhewitt 19 Apr. 2018 im 02:21