Débogage Access-Control-Allow-Origin avec Chrome/WebKit
Je suis en train d'utiliser Cross-Origin Resource Sharing avec Access-Control-Allow-Origin et en-têtes associés. J'ai ce que ça fonctionne sur Firefox, mais Chrome est de me donner la permission d'erreurs, que de regarder ce genre:
XMLHttpRequest cannot load <remote>. Origin <local> is not allowed by Access-Control-Allow-Origin.
Le réseau inspecteur affiche de la demande, mais pas de réponse (et de ne pas inclure les OPTIONS de contrôle en amont de demande et de réponse). J'ai inspecté la demande de sortie à l'aide de curl et à la reproduction de tous les en-têtes, et ce que je vois correspond à ce que la spécification implique (et encore, ce que Firefox accepte). Je suis à une perte de la façon de déboguer ce loin-existe-il des astuces pour voir l'activité du réseau à un niveau inférieur à ce que Chrome fournit normalement? D'informations sur la façon dont google Chrome interprète de la SCRO demandes différemment de Firefox?
OriginalL'auteur Ian Bicking | 2011-01-20
Vous devez vous connecter pour publier un commentaire.
Je soupçonne que ce que vous voyez est un contrôle en amont, suivi par un défaut de Chrome de la demande en raison d'un bug. Qui pourrait expliquer pourquoi les choses fonctionnent dans Firefox mais pas sur Chrome.
On vous envoi toutes les en-têtes personnalisés à votre demande? Il y a un bug dans WebKit où OBTENIR des demandes de avec des en-têtes personnalisés échoue (bug ici: http://code.google.com/p/chromium/issues/detail?id=57836). J'ai aussi remarqué que Chrome parfois s'attend à ce que le Contenu-Type d'en-tête dans l'Access-Control-Allow-en-Têtes de liste, même si le Type de Contenu est un simple en-tête.
Aussi, vous mentionnez que le réseau de l'inspecteur de ne pas inclure les OPTIONS de contrôle en amont? Le réseau inspecteur utilisez-vous? Je vous recommande d'utiliser Wireshark, puisque cela vous donne des détails sur le réseau de trafic que google Chrome, l'inspecteur n'a pas à fournir (par exemple, Wireshark journaux de contrôle en amont des demandes).
Certains autres débogage conseils:
Essayer la demande dans Safari. Cela aidera à réduire à un Chrome bug ou d'une WebKit bug.
La fois où j'ai vu l'erreur que vous voyez (Wireshark affiche une demande, mais pas une réponse), c'est parce que mon serveur ne comprend pas l'Access-Control-Allow-Origin-tête, ce qui n'est pas inclus parce que Chrome n'est pas l'envoi de l'en-tête d'Origine (voir le bug ci-dessus). Dans votre trace réseau, voyez-vous un en-tête d'Origine dans la demande? Vous avez le contrôle sur le serveur, et si oui, est-il recevoir un en-tête d'Origine?
Sa difficile à déboguer le problème réel, sans plus de détails. Si vous rencontrez toujours des problèmes, vous pouvez poster demande/en-têtes de réponse ici?
content-type
n'est qu'un simple en-tête lorsque sa valeur estapplication/x-www-form-urlencoded
,multipart/form-data
, outext/plain
. Voir w3.org/TR/cors/#simple-header.OriginalL'auteur monsur