2011-04-28 9 views
37

Una solicitud GET simple sin encabezados personalizados. La respuesta se devuelve como se esperaba. Se puede acceder a los datos del cuerpo, pero no a los encabezados.Intercambio de recursos entre dominios GET: 'se negó a obtener el encabezado inseguro "etag"' de la respuesta

Cuando intento acceder a la "etag" de cabecera, los navegadores lanzar una excepción:

se negó a subir insegura cabecera "etag"

Chrome, Safari y Firefox todos se comportan de la misma. No lo probé en IE.

¿Qué me falta aquí?

+0

ACTUALIZACIÓN: Sólo los siguientes encabezados son accesibles: - Expira - Last-Modified - Content-Language - Cache-Control - Content-Type – Mohamed

+0

Si alguien quiere saber cuándo fue que esto esté arreglado, he encontrado los errores en [webkit] (https://bugs.webkit.org/show_bug.cgi?id=41210) y [chromium] (https://code.google.com/p/chromium/issues/detail?id= 87338 & can = 1 & q = Access-Control-Expose-Headers & colspec = ID% 20Pri% 20M% 20Iteration% 20ReleaseBlock% 20Cr% 20Status% 20Owner% 20Summary% 20OS% 20Modified). – rvignacio

Respuesta

66

cabeceras de respuesta Sólo simples están expuestos al utilizar CORS. Los encabezados de respuesta simples se definen here. ETag no es una simple respuesta de encabezados. Si desea exponer las cabeceras no simples, es necesario establecer la cabecera Access-Control-Expose-Headers, así:

Access-Control-Expose-Headers: ETag 

Sin embargo, tenga en cuenta que me he dado cuenta de errores en Chrome, Safari y Firefox que impiden que los encabezados no simples de estar expuesto correctamente Esto puede ser arreglado por ahora, no estoy seguro.

No debería ser necesario hacer una solicitud previa al vuelo, ya que antes del vuelo sólo es necesario para los métodos HTTP POST o no simples petición cabeceras no obtener/(y usted está planteando respuesta cabeceras).

+3

Confirmo que el soporte para el encabezado Access-Control-Expose-Headers es defectuoso. – Mohamed

+2

Me encantaría saber qué hace que Last-Modified sea simple y no ETag. ¿No se supone que deben soportar el mismo propósito, que es la optimización de caché? – Mohamed

+1

Haces un buen punto.No conozco la motivación detrás de esto, pero aquí hay un hilo que lo menciona (no lo he leído aún): http://lists.w3.org/Archives/Public/public-webapps/2010AprJun/0038. html – monsur

1

Alguna vez ha tratado de AJAX 2.0 (Cruz de dominio compartido) es una metodología bastante recientemente llevado a cabo por el W3C: http://www.w3.org/TR/XMLHttpRequest2/#ref-cors

También hay otra forma de hacer esto, que se llama JSON-P, que es como un JSON solicitud, pero puede usarlo para dominios cruzados: http://en.wikipedia.org/wiki/JSONP

Ambos pueden ser muy peligrosos para los propietarios del sitio si no se configuran correctamente. Así que ten cuidado cuando lo uses.

[PS] No estoy seguro si esto ayudará a: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

+1

¿Has leído el título de la pregunta? Se supone que es CORS – mplungjan

+0

Vaya, realmente no me di cuenta si soy sincero. Pero todavía podría usar JSONP – DarkMantis

+0

Claro, pero es interesante saber qué está pasando. Especialmente porque JSONP apesta cuando se trata de manejar el error – mplungjan

Cuestiones relacionadas