Internet Explorer 10 es ignorar XMLHttpRequest ‘xhr.withCredentials = true’

Actualmente estoy teniendo un problema con una cruz-dominio de llamada de ajax usando IE10 (en IE10 modo, no de compatibilidad).

Situación:
Tengo dos dominios, http://a y http://b. Tengo una cookie para http://b. Actualmente estoy en la página http://a.

Quiero hacer un CORS solicitud para http://b mediante XMLHttpRequest (que debería funcionar, de acuerdo a http://blogs.msdn.com/b/ie/archive/2012/02/09/cors-for-xhr-in-ie10.aspx), e incluyen la cookie en la solicitud.
El JS es como sigue:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://b', true);
xhr.withCredentials = true;
xhr.send();

Esto debería asegurar que la cookie se adjunta a la solicitud; sin embargo, el Violinista de seguimiento muestra que la cookie no está conectado, y me 401: Access Denied.

El servidor está configurado para trabajar con CORS, que incluye el Control de Acceso a los encabezados:

Access-Control-Allow-Origin: http://a
Access-Control-Allow-Credentials: true

(esto no debe hacer ninguna diferencia, ya que no hay OPCIONES de comprobación previa solicitud, y la primera solicitud de IE envía es un GET, y la cookie no está presente, lo que provoca un plan 401).

Además, el fragmento de código JS funciona bien tanto en Firefox y Opera.

  • Nota: estoy viendo el mismo comportamiento cuando se utiliza jQuery, con xhrFields: { withCredentials: true }
  • No tengo IE10, pero tengo un CORS sitio de prueba. Se puede probar la siguiente solicitud en IE10 y ver si funciona? Simplemente haga clic en «Enviar Solicitud» botón y ver cuál es la respuesta. Acabo de probar y funciona en Chrome. Si no funciona en IE, podría ser un error: client.cors-api.appspot.com/…
  • He hecho algunas pruebas más. IE10 obras en la página de siempre, parece que IE10 apoya xhr.withCredentials en páginas que tienen una coincidencia de segundo nivel del nombre de dominio (por ejemplo, http://a.b.com hablando http://c.b.com), pero no cuando el segundo nivel de dominio de nombres no coinciden (por ejemplo, a.com hablar b.com)
  • Esto puede ser un error. ¿Cuál es el dominio de la cookie? Tenga en cuenta que una cookie establecida por b.com sólo será accesible por b.com. No será visible para el código JS en a.com.
  • Sí, la cookie se establece en el dominio http://b.com. Firefox y Opera, ambos incluyen la cookie cuando withCredentials se establece en true, que aún tengo que probar con Chrome y Safari.
InformationsquelleAutor Rendijs S | 2012-09-28

3 Kommentare

  1. 24

    Es, probablemente, el mismo viejo IE P3P problema. Con IE, la configuración predeterminada, si se establece una cookie sin P3P encabezado también presente en la respuesta, la cookie está marcado como de «primera parte». Lo que significa que en un contexto de terceras partes, tales como un iframe o un CORS solicitud, es decir, se niegan a enviar la cookie.

    Para solucionarlo, es necesario suministrar un P3P encabezado cuando la configuración de las cookies. Ver http://msdn.microsoft.com/en-us/library/ms537343%28v=vs.85%29.aspx para más detalles.

    Actualización: el Enlace que ahora está muerto, pero se puede ver en el Archivo de Internet

    • Esta es la respuesta correcta a la pregunta
    • Sería bueno si la respuesta podría ser actualizado a qué es exactamente esta cabecera debe ser para ahorrar tiempo sobre el docs 🙂
    • El encabezado correcto depende de las políticas de privacidad de su sitio web. O usted podría hacer como hace Google (su cabecera, es en la actualidad «p3p: CP=»Esta no es una política P3P! Consulte google.com/support/accounts/bin/… para más información.»»)
    • Desde el artículo de Microsoft en el enlace se elimina, puede usted por favor la actualización de respuesta con exactamente cómo el «suministro de P3P encabezado cuando la configuración de la cookie» por favor? @Anomia
    • La adición de un P3P encabezado de respuesta con el valor de ‘CP=»algo»‘ resuelto el problema para mí también con IE11 en Win7
    • Este artículo de Microsoft cubre el tema y es a menudo citado en situaciones similares: blogs.msdn.microsoft.com/ieinternals/2013/09/17/…
    • pertinente: blogs.msdn.microsoft.com/ie/2012/02/20/…

  2. -1

    He tenido un problema similar, y resultó que la configuración del navegador se bloquea las cookies de terceros (IE10 > Opciones de Internet > Privacidad > Avanzado > Cookies de Terceros > Aceptar). Para resolver el problema, he comprobado «Invalidar la administración automática de cookies», «Aceptar» (Cookies de Terceros) y «permitir Siempre las cookies de sesión.»

    • Tengo las Cookies de Terceros permitido, pero esto no impidió que el problema si se repite el signo ins.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea