Ich entwickle einige Website aaa.com mit Django, die domainübergreifende AJAX "GET" Anfragen sendet JSON Daten von bbb.com zu erhalten, die auch auf Django läuft und ist Verwenden des REST-Frameworks An diesem Punkt funktioniert alles gut mit dem Hinzufügen crossDomain: true; withCredentials:true
. Und natürlich ist es auf der Serverseite von aaa.com konfiguriert.
...-Allow-Credentials: true; ...-Allow-Origin: bbb.com
Cross Domain Ajax OPTIONEN Fehler 403 (Django)
Die wichtigste Frage kommt, wenn aaa.com versucht PUT POST DELETE
Ajax-Anfragen zu machen. Nach CORS Dokumentation: [https://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0], Client-Seite Ajax-Anforderung korrekt ist, und
...-Allow-Headers, ...-Allow-Methods
mit
...-Request-Headers, ...-Request-Methods
so dieser Anforderung ist nicht 'einfach' und vor allem Browser angepasst sendet Preflight-Anfrage aus aaa.com an bbb.com, um zu fragen, ob einige benutzerdefinierte Header und Methoden erlaubt sind.
Alles ist in Ordnung, aber ich bekomme immer noch 403 Fehler. Hier ist die Anforderung/Antwort:
General:
Request URL:http://bbb.com/api/someapipage/
Request Method:OPTIONS
Status Code:403 Forbidden
Remote Address:some ip:80
Response Headers:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:accept, content-type, x-csrftoken, x-requested-with
Access-Control-Allow-Methods:GET, POST, OPTIONS, HEAD, PUT, DELETE
Access-Control-Allow-Origin:http://aaa.com
Allow:GET, POST, HEAD, OPTIONS
Connection:Keep-Alive
Content-Language:en
Content-Type:application/json
Date:Mon, 04 Jul 2016 14:20:38 GMT
Keep-Alive:timeout=5, max=100
Server:gunicorn/19.6.0
Transfer-Encoding:chunked
Vary:Accept,Accept-Language,Cookie
X-Frame-Options:SAMEORIGIN
Request Headers:
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,ru;q=0.6
Access-Control-Request-Headers:accept, content-type, x-csrftoken
Access-Control-Request-Method:POST
Connection:keep-alive
Host:aaa.com
Origin:http://aaa.com
Referer:http://aaa.com/
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36
Nach Woche versucht, dieses Problem zu beheben ich diesen Server realisiert will Vary: Plätzchen auf Pre-flighted Anfrage was unmöglich ist, da Cross-Domain-Pre-Flight-Anfrage nicht Cookie enthalten kann, in seiner Kopfzeile.
Ich begann eine Lösung für dieses Problem zu finden und gefunden: https://code.djangoproject.com/ticket/13217
„Aktivieren django.middleware.locale.LocaleMiddleware führt dazu, dass django ein fügt hinzu‚Vary: Plätzchen‘. Kopfzeile jeder reponse“ So localMiddleware Header hinzugefügt Vary: Cookie auch im Vorfeld OPTIONS Antwort
Es gibt viele Empfehlungen, djang-cors-header
zu verwenden, um einige dieser Probleme zu beheben. Die Verwendung dieser Paketfunktion entspricht jedoch meinen Einstellungen auf der Serverseite.
Ich habe auch hübsches Paket gefunden: django-dont-vary-on
die, wenn installiert, können Dekoratoren Vary: Cookie zu deaktivieren, aber in meinem Fall muss ich Vary: Cookie nur in OPTIONS Antwort deaktivieren.
Ich bin etwas neu zu Django und eigentlich kann mir nicht vorstellen, was in dieser Situation zu tun ist. Jeder Schritt ist wie auf einem Minenfeld. Gibt es eine Lösung oder einige Alternativen?
danke für die antwort! Sobald ich Zugriff auf die Server-Seite bekomme, versuche ich Ihre Lösung –
Das hat mein Problem gelöst !!! ich danke dir sehr! –
Ich bin froh, dass es geholfen hat :-) – kapilsdv