Estoy intentando dar una respuesta al método HTTP OPTIONS con un encabezado Access-Control-Allow-Origin que copia los contenidos del encabezado Origin en la solicitud.El encabezado Access-Control-Allow-Origin no funciona: ¿Qué estoy haciendo mal?
Esto aparentemente no funciona, por razones que no puedo entender.
tl; dr: respuesta de OPCIONES dice:
Access-Control-Allow-Origin: http://10.0.0.105:9294
GET posterior tiene:
Origin:http://10.0.0.105:9294
Chrome dice:
Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin
no wtf?
Más detalles ...
Al mirar en la ventana de herramientas para desarrolladores de Chrome, los encabezados de la solicitud son:
OPTIONS /user/kris HTTP/1.1
Host: 10.0.0.104:8080
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://10.0.0.105:9294
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1
Access-Control-Request-Headers: origin, x-requested-with, content-type, accept
Accept: */*
Referer: http://10.0.0.105:9294/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Las cabeceras de respuesta son:
HTTP/1.0 200 OK
Date: Mon, 13 Aug 2012 11:23:45 GMT
Server: WSGIServer/0.1 Python/2.7.3
Content-Length: 0
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS
Access-Control-Max-Age: 10
Access-Control-Allow-Origin: http://10.0.0.105:9294
Access-Control-Allow-Headers: X-Requested-With, Authorization, X-Huzu-User, Content-Type, Accept
Content-Type: text/html; charset=UTF-8
Después de jQuery envía su OPCIONES solicita y obtiene la respuesta anterior, ocurren 2 cosas raras. La respuesta OPCIONES (que es un 200) se muestra en la consola de desarrolladores como un error:
OPTIONS http://10.0.0.104:8080/user/kris 200 (OK)
Después de lo cual una petición GET es rechazada. Error en la consola:
XMLHttpRequest cannot load http://10.0.0.104:8080/user/kris. Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin.
No puedo ver por qué no. ¿Qué estoy haciendo mal?
No tengo un ejemplo mínimo de error del código de jQuery que sería útil publicar aquí. Supongamos que el código de JavaScript no tiene nada de extraño, es decir, que se trata de un solo jQuery get(), lo que da como resultado la solicitud OPTIONS publicada anteriormente. Mi pregunta es: ¿qué pasa con la respuesta? – scav
¿Soy yo o hay una diferencia entre la URL del host (10.0.0.104:8080) y la URL del refere (10.0.0.105:9294/)? – rene
@rene, sí. Mi servidor es una aplicación python wsgi que se ejecuta en mi máquina local (10.0.0.104:8080), y las pruebas entre sitios están ocurriendo desde una página que estoy cargando desde 10.0.0.105:9294.No sé qué efecto tiene el referer sobre el control de acceso. ¿Crees que es relevante? Si es así, ¿qué hago con eso? – scav