Cómo hacer que funcione una solicitud posterior de intercambio de recursos de origen cruzado (CORS)


Tengo una máquina en mi lan local (machineA) que tiene dos servidores web. El primero es el incorporado en XBMC (en el puerto 8080) y muestra nuestra biblioteca. El segundo servidor es un script CherryPy python (puerto 8081) que estoy usando para activar una conversión de archivos bajo demanda. La conversión de archivos se activa mediante una solicitud AJAX POST desde la página servida desde el servidor XBMC.

  • Goto http://machineA:8080 que muestra la biblioteca
  • La biblioteca es mostrado
  • El usuario hace clic en el enlace' convertir ' que emite el siguiente comando -

JQuery Ajax Request

$.post('http://machineA:8081', {file_url: 'asfd'}, function(d){console.log(d)})
  • El navegador emite una solicitud de OPCIONES HTTP con las siguientes cabeceras;

Cabecera de solicitud-OPCIONES

Host: machineA:8081
User-Agent: ... Firefox/4.01
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://machineA:8080
Access-Control-Request-Method: POST
Access-Control-Request-Headers: x-requested-with
  • El servidor responde con lo siguiente;

Response Header-OPTIONS (STATUS = 200 OK)

Content-Length: 0
Access-Control-Allow-Headers: *
Access-Control-Max-Age: 1728000
Server: CherryPy/3.2.0
Date: Thu, 21 Apr 2011 22:40:29 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Content-Type: text/html;charset=ISO-8859-1
  • La conversación se detiene. El navegador, debe en teoría, emitir una solicitud POST como el servidor respondió con la correcta (?) CORS headers (Access-Control-Allow-Origin:*)

Para la solución de problemas, también he emitido el mismo $.post comando desde http://jquery.com . Aquí es donde estoy perplejo, desde jquery.com, la solicitud post funciona, una solicitud de OPCIONES se envía después de un MENSAJE. Las cabeceras de esta transacción están abajo;

Cabecera de solicitud-OPCIONES

Host: machineA:8081
User-Agent: ... Firefox/4.01
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://jquery.com
Access-Control-Request-Method: POST

Encabezado de respuesta-OPCIONES (STATUS = 200 OK)

Content-Length: 0
Access-Control-Allow-Headers: *
Access-Control-Max-Age: 1728000
Server: CherryPy/3.2.0
Date: Thu, 21 Apr 2011 22:37:59 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Content-Type: text/html;charset=ISO-8859-1

Encabezado de solicitud-POST

Host: machineA:8081
User-Agent: ... Firefox/4.01
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://jquery.com/
Content-Length: 12
Origin: http://jquery.com
Pragma: no-cache
Cache-Control: no-cache

Encabezado de respuesta-POST (STATUS = 200 OK)

Content-Length: 32
Access-Control-Allow-Headers: *
Access-Control-Max-Age: 1728000
Server: CherryPy/3.2.0
Date: Thu, 21 Apr 2011 22:37:59 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Content-Type: application/json

No puedo entender por qué la misma solicitud funcionaría desde un sitio, pero no desde el otro. Espero que alguien pueda señalar lo que me estoy perdiendo. ¡Gracias por tu ayuda!


Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32

Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52