Ich habe ein Problem mit der Art, wie Safari CORS Anfragen behandelt. Betrachten Sie folgendes Szenario:Safari schlägt CORS-Anfrage nach 302 Redirect
- DomainA beherbergt eine Seite, die eine XHR Anfrage an DomainB macht (Herkunft Header auf DomainA)
- DomainB liefert 302-Umleitung tun DomäneC (Ursprungs-Header auf null gesetzt wird, was zu sein scheint OK mit RFC)
- DomäneC Rück 200 Antwort mit dem tatsächlichen Inhalt
Der in Chrome funktioniert, FF, aber es funktioniert nicht auf Safari (getestet auf Mozilla/5.0 (Macintosh, Intel Mac OS X 10_10_5) AppleWebKit/600,8 .9 (KHTML, wie Gecko) Version/8.0.8 Safari/600.8.9).
Wenn ich die Anfrage ohne xhr.withCredentials eingeschaltet mache, macht Safari zuerst eine OPTIONS Preflight Anfrage vor der eigentlichen Anfrage an DomainC, was IMHO nicht notwendig ist, da alle Anfragen einfache Anfragen sind, die ich aber behandeln kann. Problem ist, dass Safari nach einer Preflight-Anfrage an DomainC fehlschlägt, in der es heißt: "Kann keine Anfrage von null machen". Ich kann dies umgehen, indem ich Access-Control-Allow-Origin auf * setze und die Access-Control-Allow-Credentials-Header (diese schließen sich gegenseitig aus) fallen lassen, wodurch dieses Szenario funktioniert. Aber ich denke immer noch, dass das nicht korrekt ist.
Nun, ich brauche Anmeldeinformationen (und nein, ich kann es nicht anders weitergeben, da es auf einigen Servern von Drittanbietern abhängt). So lassen Sie sich gesetzt
xhr.withCredentials
zu wahren, und wir sind wieder auf „Kann keine Anfrage von null machen“ und jetzt auch von Platzhalter Access-Control-Allow-Credentials hilft nicht.
Ich denke, alle CORS-Header sind richtig eingestellt, aber bitte zögern Sie nicht mich zu überprüfen. Testbeispiel kann hier gefunden werden: http://a.ihatesafari.com
Was ist hier los? Ist es ein Käfer oder fehle ich etwas?
Danke für Antworten
Es schlägt sogar in dem einfacheren Fall von DomainA fehl, das ein XHR zu DomainA macht und zu DomainC umleitet. – hrdwdmrbl