2011-04-28 1 views
37

Une simple demande GET sans en-tête personnalisés. La réponse est renvoyée comme prévu. Les données dans le corps sont accessibles, mais pas les en-têtes.fâchez le partage des ressources du domaine: « a refusé de se tête dangereux « etag » » de la réponse

Lorsque je tente d'accéder à la "ETAG" en-tête, les navigateurs soulèvent une exception:

Refusé pour 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 qui me manque ici?

+0

MISE À JOUR: Seuls les en-têtes suivants sont accessibles: - Expire - Last-Modified - Content-Language - Cache-Control - Content-Type – Mohamed

+0

Si quelqu'un veut savoir quand est que ce soit réglé, j'ai trouvé les insectes dans [] webkit (https://bugs.webkit.org/show_bug.cgi?id=41210) et [chrome] (https://code.google.com/p/chromium/issues/detail?id= 87338 & peut = 1 & q = contrôle d'accès-Expose-têtes et colspec = ID% 20Pri% 20M% 20Iteration% 20ReleaseBlock% 20Cr% 20Status% 20Owner% 20Summary% 20oS% 20Modified). – rvignacio

Répondre

66

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

Access-Control-Expose-Headers: ETag 

Cependant, notez que je l'ai remarqué des bugs dans Chrome, Safari et Firefox qui empêchent les en-têtes non-simples à partir être exposé correctement. Cela peut être réparé 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 nécessaire que pour les non-GET/POST méthodes HTTP ou non simples demande têtes (et vous PARLONS réponse en-têtes).

+3

Je confirme que le support de l'en-tête Access-Control-Expose-Headers est buggé. – Mohamed

+2

J'aimerais savoir ce qui rend Last-Modified simple et non ETag. Ne sont-ils pas censés soutenir le même objectif qu'est l'optimisation du cache? – Mohamed

+1

Vous faites un bon point.Je ne connais pas la motivation derrière cela, mais voici un fil qui le mentionne (je ne l'ai pas encore lu): http://lists.w3.org/Archives/Public/public-webapps/2010AprJun/0038. html – monsur

1

Avez-vous déjà essayé AJAX 2.0 (domaine Cross partage) est une méthodologie assez récemment mis 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 un JSON demande, 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 s'ils ne sont pas configurés correctement. Alors faites attention quand vous l'utilisez.

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

+1

Avez-vous lu le titre de la question? Il est censé être CORS – mplungjan

+0

Oups, je ne l'ai pas vraiment remarqué si je suis honnête. Mais encore pourrait utiliser JSONP – DarkMantis

+0

Bien sûr, mais il est intéressant de savoir ce qui se passe. D'autant plus que JSONP craint quand il s'agit de la gestion des erreurs – mplungjan

Questions connexes