Frage

Ich versuche es zu verwenden Ursprungsübergreifende Ressourcenfreigabe mit Access-Control-Allow-Origin und zugehörigen Headern.Ich habe es unter Firefox zum Laufen gebracht, aber Chrome zeigt mir Berechtigungsfehler an, die so aussehen:

XMLHttpRequest cannot load <remote>. Origin <local> is not allowed by Access-Control-Allow-Origin.

Der Netzwerkinspektor zeigt die Anfrage, aber keine Antwort (und enthält nicht die OPTIONS-Preflight-Anfrage und -Antwort).Ich habe die Anforderungsausgabe mit Curl überprüft und alle Header reproduziert, und was ich sehe, passt zu dem, was die Spezifikation impliziert (und wiederum zu dem, was Firefox akzeptiert).Ich weiß nicht, wie ich das weiter debuggen soll. Gibt es Tricks, um die Netzwerkaktivität auf einem niedrigeren Niveau als dem, was Chrome normalerweise bereitstellt, anzuzeigen?Informationen darüber, wie Chrome CORS-Anfragen anders interpretiert als Firefox?

War es hilfreich?

Lösung

Ich vermute, dass Sie einen Preflight sehen, auf den aufgrund eines Fehlers eine fehlgeschlagene Chrome-Anfrage folgt.Das würde erklären, warum die Dinge in Firefox funktionieren, aber nicht in Chrome.

Senden Sie in Ihrer Anfrage benutzerdefinierte Header?Es gibt einen Fehler in WebKit, bei dem GET-Anfragen mit benutzerdefinierten Headern fehlschlagen (Fehler hier: http://code.google.com/p/chromium/issues/detail?id=57836).Mir ist auch aufgefallen, dass Chrome manchmal den Content-Type-Header in der Access-Control-Allow-Headers-Liste erwartet, obwohl Content-Type ein einfacher Header ist.

Erwähnen Sie außerdem, dass der Netzwerkinspektor den OPTIONS-Preflight nicht enthält?Welchen Netzwerkinspektor verwenden Sie?Ich würde die Verwendung von Wireshark empfehlen, da Sie dadurch Details zum tatsächlichen Netzwerkverkehr erhalten, die der Inspektor von Chrome nicht bereitstellt (Wireshark protokolliert beispielsweise Preflight-Anfragen).

Einige weitere Debugging-Tipps:

Probieren Sie die Anfrage in Safari aus.Dies hilft dabei, den Fehler auf einen Chrome- oder WebKit-Fehler einzugrenzen.

Wenn ich den Fehler gesehen habe, den Sie sehen (Wireshark zeigt eine Anfrage, aber keine Antwort), liegt das daran, dass mein Server den Access-Control-Allow-Origin-Header nicht enthält, der nicht enthalten ist, weil Chrome nicht enthalten ist. t Senden des Origin-Headers (siehe Fehler oben).Sehen Sie in Ihrer Netzwerkverfolgung einen Origin-Header in der Anfrage?Haben Sie die Kontrolle über den Server und wenn ja, erhält er einen Origin-Header?

Es ist schwierig, das eigentliche Problem ohne weitere Details zu beheben.Wenn Sie immer noch Probleme haben, können Sie hier Anfrage-/Antwort-Header posten?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top