Cross domaine de ressources partage GET: « a refusé de se tête dangereux « etag » » de la réponse
-
26-10-2019 - |
Question
Une simple requête GET sans en-tête personnalisés. La réponse est renvoyée comme prévu. Les données dans le corps est accessible, mais pas les en-têtes.
Quand j'essaie d'accéder à l'en-tête "ETAG", les navigateurs soulèvent une exception:
Refus d'obtenir en-tête dangereux "ETAG"
Chrome, Safari et Firefox se comportent tous les mêmes. Je n'ai pas testé sur IE.
Qu'est-ce que je manque ici?
La solution
sont exposés Seuls les en-têtes de réponse simples lors de l'utilisation CORS. têtes de réponse simples sont définis . ETag
n'est pas un en-têtes de réponse simples. Si vous souhaitez exposer les en-têtes non-simples, vous devez définir l'en-tête de Access-Control-Expose-Headers
, comme suit:
Access-Control-Expose-Headers: ETag
Toutefois, notez que j'ai des bugs remarqués dans Chrome, Safari et Firefox qui empêchent les en-têtes non simples d'être exposé correctement. Cela peut être fixé maintenant, je ne suis pas sûr.
Vous ne devriez pas avoir besoin de faire une demande de contrôle en amont, puisque prévol est uniquement requise pour les méthodes http non-GET / POST ou non-simple, demande en-têtes (et vous PARLONS réponse en-têtes).
Autres conseils
Avez-vous déjà essayé AJAX 2.0 (partage de la Croix de domaine) est une méthodologie assez récemment mise en évidence par le W3C: http://www.w3.org/TR/XMLHttpRequest2/#ref-cors
Il y a aussi une autre façon de le faire, que l'on appelle JSON-P, il est comme une demande de JSON, mais vous pouvez l'utiliser pour les domaines croisés: http://en.wikipedia.org/wiki/JSONP
Les deux peuvent être très dangereux pour les propriétaires du site sinon de configuration correctement si. Alors, soyez prudent lorsque vous l'utilisez.
[PS] Je ne sais pas si cela aide: http://www.w3.org/Protocols/ RFC2616 / RFC2616-sec14.html