Safari schlägt CORS-Anfrage nach 302 Redirect fehl

8

Ich habe ein Problem damit, wie Safari CORS-Anfragen behandelt. Stellen Sie sich folgendes Szenario vor:

  1. DomainA hostet eine Seite, die eine XHR-Anforderung an DomainB stellt (der Ursprungsheader ist auf DomainA eingestellt)
  2. DomainB gibt 302 redirect domainC zurück (Ursprungsheader ist auf null gesetzt, was mit RFC in Ordnung zu sein scheint)
  3. DomainC gibt 200 Antworten mit tatsächlichem Inhalt zurück

Dies funktioniert in Chrome, FF, aber es schlägt bei Safari fehl (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 aktivierte xhr.withCredentials mache, macht Safari zuerst eine OPTIONS Preflight-Anfrage, bevor die eigentliche Anfrage an DomainC gestellt wird, was nicht unbedingt notwendig ist, da alle Anfragen einfache Anfragen sind, die ich aber bearbeiten 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 das umgehen, indem ich Access-Control-Allow-Origin auf * setze und den Access-Control-Allow-Credentials-Header verlasse (diese schließen sich gegenseitig aus), wodurch dieses Szenario funktioniert. Aber ich denke immer noch, dass das nicht korrekt ist.

Nun, die Sache ist, ich brauche Anmeldeinformationen, um weitergegeben zu werden (und nein, ich kann es nicht anders weitergeben, da es von einigen Servern Dritter abhängt). Also, lass uns

einstellen

xhr.withCredentials

ist wahr und wir sind zurück auf "Kann keine Anfrage von Null stellen" und jetzt helfen sogar Platzhalter-Zugriffskontroll-Zulassen-Anmeldeinformationen nicht.

Ich denke, alle CORS-Header sind richtig eingestellt, aber bitte zögern Sie nicht, mich zu überprüfen. Testbeispiel finden Sie hier: Ссылка

Was ist hier los? Ist es ein Fehler oder fehlt mir etwas?

Danke für die Antworten

    
flopin 01.09.2015, 13:27
quelle

1 Antwort

3

Ich hatte dieses Problem ebenfalls und fand diesen Fehler von 2012, der es zu beschreiben scheint . Das Ausführen des Testcodes, auf den im Fehler in FF / Chrome / Safari verwiesen wird, führte nur in Safari zu Fehlern. Es scheint, dass der Fehler nicht gepatcht wurde.

Letztendlich, um dies zu umgehen, habe ich unsere HTTP-API so modifiziert, dass ein optionaler Abfrageparameter hinzugefügt wurde, um eine andere Antwort auszulösen, die 200 OK mit einem JSON-Body zurückgab, der die URL enthielt, der der Client folgen sollte. Wenn Sie ein Verbraucher der HTTP-API einer anderen Person sind, hilft das leider nicht viel.

    
MisterG 03.12.2015 23:28
quelle