2011-01-20 7 views
7

Estoy tratando de usar Cross-Origin Resource Sharing con Access-Control-Allow-Origin y encabezados relacionados. Tengo que trabajar en Firefox, Chrome, pero me está dando errores de permisos, que se ven esto como:Depuración de acceso-control-permitir-origen con Chrome/WebKit

XMLHttpRequest cannot load <remote>. Origin <local> is not allowed by Access-Control-Allow-Origin. 

El inspector de la red muestra la petición, pero no hay respuesta (y no incluye los de petición y respuesta de verificación previa OPCIONES). Inspeccioné el resultado de la solicitud usando curl y reproduciendo todos los encabezados, y lo que veo se ajusta a lo que la especificación implica (y de nuevo, lo que Firefox acepta). No entiendo cómo depurar esto aún más: ¿hay trucos para ver la actividad de la red a un nivel inferior al que normalmente proporciona Chrome? ¿Información sobre cómo Chrome interpreta las solicitudes CORS de forma diferente a Firefox?

Respuesta

5

Sospecho que lo que ves es una verificación previa seguida de una solicitud de Chrome errónea debido a un error. Eso explicaría por qué las cosas funcionan en Firefox pero no en Chrome.

¿Está enviando encabezados personalizados en su solicitud? Hay un error en WebKit donde las solicitudes GET con encabezados personalizados fallan (error aquí: http://code.google.com/p/chromium/issues/detail?id=57836). También he notado que Chrome a veces espera el encabezado Content-Type en la lista Access-Control-Allow-Headers, aunque Content-Type es un encabezado simple.

Además, menciona que el inspector de red no incluye la verificación previa OPTIONS? ¿Qué inspector de red estás usando? Recomiendo usar Wireshark, ya que esto le da detalles sobre el tráfico de red real que el inspector de Chrome no proporciona (por ejemplo, Wireshark registrará las solicitudes de verificación previa).

Algunas otras sugerencias de depuración:

intentar la petición en Safari. Esto ayudará a limitarlo a un error de Chrome o un error de WebKit.

Las veces que he visto el error que está viendo (Wireshark muestra una solicitud pero no una respuesta), es porque mi servidor no incluye el encabezado Access-Control-Allow-Origin, que no está incluido porque Chrome no está enviando el encabezado Origen (ver error arriba). En su rastreo de red, ¿ve un encabezado de origen en la solicitud? ¿Tiene control sobre el servidor y, de ser así, recibe un encabezado de origen?

Es difícil depurar el problema real sin más detalles. Si todavía tiene problemas, ¿puede publicar los encabezados de solicitud/respuesta aquí?

+4

Gracias por las sugerencias. En última instancia, el problema era el certificado SSL: estaba auto-firmado y no lo había aceptado en ese perfil. Después de visitar el recurso directamente (no a través de XHR) obtuve el diálogo de cert y luego las solicitudes de XHR funcionó. –

+0

'content-type' es solo un encabezado simple cuando su valor es' application/x-www-form-urlencoded', 'multipart/form-data', o' text/plain'. Ver http://www.w3.org/TR/cors/#simple-header. –

Cuestiones relacionadas