2017-09-15 3 views
0

Update: Rewrite der Frage, da ich einige neue Informationen habe. Der Verlauf ist in den Änderungen sichtbar.CORS schlägt auf Anfrage mit OPTIONS fehl (Antwort mit Status: 0)

Ausgabe Einführung
Ich habe eine django-rest-framework Anwendung api.nrzonline.nl auf eine Sub-Domain läuft. Das Frontend ng2 + webpack Anwendung läuft auf der Domäne selbst nrzonline.nl. Wenn eine Anfrage mit ng2-restangular an die API senden, habe ich die folgenden Fehler in meiner Konsole erhalten:

zone.js OPTIONS http://api.nrzonline.com/project/ net::ERR_EMPTY_RESPONSE 
EXCEPTION: Response with status: 0 for URL: null 

die aktuelle Ausgabe
Nach einigen Tests mit Locken, fand ich, dass alle Anforderungen fehlschlagen, wenn der Preflight Anfrage mit OPTIONS ist senden.

Anfrage mit -X GET funktioniert:

curl 'api.nrzonline.nl/skill/' -X GET 
[{"id":1,"category":{"id":1,"title":"skill-a",...}] 

(Preflight) Anfrage mit -X OPTIONS nicht ohne Antwort

curl 'api.nrzonline.nl/skill/' -X OPTIONS 
curl: (52) Empty reply from server 

Durchführen dieser -x OPTIONS Anfrage auf die API auf dem Server Django Entwicklung lokal funktioniert ohne Probleme.

Servereinstellungen

  • CORS_ORIGIN_ALLOW_ALL = True
  • CORS_ALLOW_METHODS ist auf Standard, die CORS_ALLOW_HEADERSOPTIONS
  • können auf Standard-

Middleware ist:

MIDDLEWARE = [ 
    ... 
    'corsheaders.middleware.CorsMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    ... 
] 

Was ich versucht habe

  • Ich habe gelesen, dass es möglich ist, dass der Server HTTPS-Anforderung erfordert, aber derzeit gibt es keine SSL-Zertifikat aktiv. (source) Obwohl, habe ich zu curl versuchen mit --insecure (source)
  • Senden der Anfrage als text/plain statt application/json mit -H "Content-Type: text/plain" (source (comment on answer))

Die Frage
Was mir fehlt/falsch machen , so dass der Preflight mit -X OPTIONS fehlschlägt. Irgendwelche Tipps, Erklärungen oder Hinweise auf eine mögliche Lösung sind willkommen.

Antwort

0

Antwort Kredite gehen zu meinem Bruder, hoster meine Website

Die Frage war DirectAdmin verwendet.Standardmäßig erlaubt DirectAdmin nur GET, POST und HEAD. Hinzufügen OPTIONS sollte das Problem beheben

if ($request_method !~ ^(GET|HEAD|POST)$) { 
    return 444; 
} 

:

Diese Einstellungen werden in include /etc/nginx/webapps.conf; als gefunden. Entfernen oder kommentieren Sie den Codeblock, um eine beliebige Anforderungsmethode zuzulassen.

Die Änderung von /etc/nginx/webapps.conf kann jedoch dazu führen, dass DirectAdmin diese Datei während einer neuen HTTPD-Aktualisierung überschreibt. Die Datei <path_to_directadmin>/custombuild/costum/nginx/conf wird verwendet, um eine conf Datei zu generieren. Wenn Sie hier Änderungen vornehmen, sollten Sie verhindern, dass Ihre Anpassungen verloren gehen.

Verwandte Themen