Debuggen von Access-Control-Allow-Origin mit Chrome/WebKit
Ich versuche, Cross-Origin Resource Sharing mit Access-Control-Allow-Origin und die zugehörigen Header. Ich habe es funktioniert auf Firefox, aber Chrome gibt mir die Erlaubnis, Fehler, die Aussehen wie diese:
XMLHttpRequest cannot load <remote>. Origin <local> is not allowed by Access-Control-Allow-Origin.
Den network inspector zeigt die Anfrage, aber keine Antwort (und nicht die OPTIONEN preflight-request und response). Ich inspizierte die Anfrage Ausgabe mit curl und der Wiedergabe der überschriften, und was ich sehe passt das, was die Angabe bedeutet (und wieder, was Firefox akzeptiert). Ich bin an einem Verlust, wie zu Debuggen weiter -- gibt es tricks für das sehen der Netzwerk-Aktivität auf einem niedrigeren Niveau als das, was Chrome normalerweise bietet? Informationen darüber, wie Chrome interpretiert CORS-Anfragen anders als Firefox?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich vermute, was Sie sehen, ist ein preflight, gefolgt von einer fehlerhaften Chrome Anfrage aufgrund eines Fehlers. Das würde erklären, warum die Dinge so funktionieren, in Firefox aber nicht in Chrome.
Schicken Sie alle benutzerdefinierten Header in Ihrer Anfrage? Da ist ein Fehler in WebKit, wo GET-Anforderungen mit benutzerdefinierten Header schlägt fehl (Fehler hier: http://code.google.com/p/chromium/issues/detail?id=57836). Ich habe auch bemerkt, dass Chrome manchmal erwartet, dass der Content-Type-header in der Access-Control-Allow-Header-Liste, obwohl der Content-Type ist ein einfacher header.
Auch, Sie erwähnen, dass die Netzwerk-Inspektor nicht die preflight-OPTIONEN? Die Netzwerk-Inspektor verwenden Sie? Ich würde empfehlen, mit Wireshark, da dies gibt Ihnen Informationen über die tatsächlichen Netzwerkverkehr, der Chrome inspector nicht bieten (zum Beispiel Wireshark log-preflight requests).
Einige andere debugging-Tipps:
Versuchen die Anfrage in Safari. Dies wird helfen, einzugrenzen, um ein Chrome-bug oder einen WebKit-bug.
Den ich mal gesehen habe, die Fehlermeldung, die Sie sehen (Wireshark zeigt eine Anfrage, aber keine Reaktion), es ist da mein server nicht die Access-Control-Allow-Origin-header, die nicht enthalten ist, weil Chrom ist nicht das senden der Origin-header (siehe Fehler oben). In Ihrem Netzwerk verfolgen, sehen Sie eine Origin-header in der Anforderung? Sie haben die Kontrolle über den server, und wenn ja, ist es, erhalten eine Origin-header?
Seine schwer zu Debuggen, das eigentliche Problem, ohne weitere details. Wenn Sie weiterhin Probleme haben, können Sie post-request/response-Header hier?
content-type
ist nur eine einfache Kopfzeile, wenn Ihr Wert istapplication/x-www-form-urlencoded
,multipart/form-data
odertext/plain
. Siehe w3.org/TR/cors/#simple-header.