web-dev-qa-db-fra.com

Partage de ressources interdomaines GET: «refusé d'obtenir un en-tête non sécurisé« etag »» de Response

Une simple demande GET sans en-têtes personnalisés. La réponse est renvoyée comme prévu. Les données du corps sont accessibles, mais pas les en-têtes.

Lorsque j'essaie d'accéder à l'en-tête "etag", les navigateurs déclenchent une exception:

Refus d'obtenir un en-tête dangereux "etag"

Chrome, Safari et Firefox se comportent tous de la même manière. Je ne l'ai pas testé sur IE.

Qu'est-ce que j'oublie ici?

50
Mohamed

Seuls les en-têtes de réponse simples sont exposés lors de l'utilisation de CORS. Des en-têtes de réponse simples sont définis ici . ETag n'est pas un simple en-tête de réponse. Si vous souhaitez exposer des en-têtes non simples, vous devez définir le Access-Control-Expose-Headers en-tête, comme ceci:

Access-Control-Expose-Headers: ETag

Cependant, notez que j'ai remarqué des bogues dans Chrome, Safari et Firefox qui empêchent les en-têtes non simples d'être correctement exposés. Cela peut être corrigé maintenant, je ne suis pas sûr.

Vous ne devriez pas avoir besoin de faire une demande de contrôle en amont, car le contrôle en amont n'est requis que pour les méthodes http non GET/POST ou non simples request en-têtes (et vous demandez à propos de response en-têtes).

82
monsur

Avez-vous déjà essayé AJAX 2.0 (partage de domaine croisé) est une méthodologie assez récemment mise en avant par le W3C: http://www.w3.org/TR/XMLHttpRequest2/#ref -cors

Il y a aussi une autre façon de faire cela, qui s'appelle JSON-P, c'est comme une requête JSON, mais vous pouvez l'utiliser pour des domaines croisés: http://en.wikipedia.org/wiki/JSONP

Les deux peuvent être très dangereux pour les propriétaires du site s'ils ne sont pas configurés correctement. Soyez donc prudent lorsque vous l'utilisez.

[PS] Je ne sais pas si cela vous aidera: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

2
DarkMantis