2012-03-11 15 views
18

Como jQuery ajax no está funcionando para CORS/IE, estoy usando XDomainRequest para recuperar datos de otro servidor. El trabajo está bien, pero me gustaría enviar un encabezado ('Autentificación', 'tipo de contenido').encabezado de origen cruzado en IE8/IE9

¿Existe la posibilidad de agregar/cambiar encabezado en XDomainRequest?

¿Alguien sabe alguna solución?

Respuesta

17

Esto es lo que hicimos para IE.

Si tiene control sobre el dominio de destino, aloje allí un archivo html (estático). Incluye el html usando el iframe.

Ahora, este iframe sí tiene acceso al dominio local, por lo que puede comunicarse entre el marco primario y secundario para obtener lo que necesita.

Esto funcionó mucho mejor que XDomainRequest para nosotros.

window.postMessage es la mejor manera de configurar la comunicación:

pero estoy bastante seguro de que sólo comenzó a trabajar desde IE8. Si también necesita navegadores más antiguos, debe usar un hack diferente.

En nuestro caso, se trataba de nuestro sistema de 3 capas:

  1. CORS, para los navegadores que lo soportan
  2. un iframe & window.postMessage como punto de retorno primario
  3. Un proxy del lado del servidor secuencia de comandos como la secundaria secundaria

Todas estas opciones funcionan bien, son confiables y no se sienten demasiado como un hackeo. La reserva secundaria casi nunca se usó.

Tenga en cuenta que el encabezado 'Autenticación' específicamente es especial, y no me sorprendería que eso esté bloqueado en ciertas circunstancias de todos modos. Agregamos un encabezado personalizado 'X-Authenticate' ya que pasó todo el tiempo.

+0

Eché un vistazo a la solución iframe los últimos días. Pero como tiene que establecer 'document.domain', parece funcionar solo para la comunicación entre dos subdominios del mismo TLD. Pero, ¿qué hay de dos TLD diferentes? (Podría tener que profundizar más en las cosas del servidor proxy en el fin de semana ...) –

+0

La solución iframe * debería * funcionar si el iframe está alojado en el mismo dominio que la API. Si un script proxy es una solución para usted, puede ser * mucho * más fácil para sus propósitos. Tenga en cuenta que es (por lo general) no tanto un servidor proxy, ya que es solo un script proxy del lado del servidor. – Evert

+0

bien, hice que las cosas del iframe funcionen. Paso un objeto con toda la información (encabezados, cuerpo posterior, ...) a la ventana de marco, que realiza las solicitudes y devuelve la respuesta. :) Acerca de la secuencia de comandos proxy: si alojo la secuencia de comandos en el servidor de la API, todavía tendría que enviar la solicitud con los encabezados en Ajax. ¿Entonces la secuencia de comandos estaría en el mismo servidor que la página 'solicitud'? (=^cliente)? De esta manera IE me permite enviar encabezados, cuerpo, etc. y el proxy envía la solicitud al api-servidor (rizo)?!? –

2

El XDomainRequest de IE no permite establecer encabezados personalizados. Ver elemento # 3 aquí: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx El objeto XDomainRequest está bloqueado hasta el punto donde es difícil hacer solicitudes autenticadas.

+1

¡Pero debe haber una solución alternativa!?! ¿O el IE es peor de lo que pensaba? –

+1

Sin la capacidad de establecer encabezados o cookies personalizados, no estoy seguro de una buena forma de realizar solicitudes autenticadas. Puede pasar las credenciales de autenticación como un parámetro de consulta (creo que el flujo de agente de usuario de OAuth2 lo permite), sin embargo, esto puede no ser tan seguro (y debe hacerse a través de SSL). Lo siento, tal vez alguien más tiene una mejor respuesta :-) – monsur

+0

Pensé que solo los necesita para iniciar sesión en el otro sitio de dominios. (estableciendo así las cookies de sesión apropiadas y los encabezados de autenticación). Entonces su XDomainRequest usaría la sesión que establecieron? Yo podría, sin embargo, estar equivocado. –

Cuestiones relacionadas