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 a pedido. La conversión de archivos se desencadena por una solicitud AJAX POST desde la página servida desde el servidor XBMC.
- Ir a http: // machineA: 8080 que muestra la biblioteca
- Se muestra la biblioteca
- El usuario hace clic en el enlace 'convertir' que emite el siguiente comando:
Solicitud jQuery Ajax
$.post('http://machineA:8081', {file_url: 'asfd'}, function(d){console.log(d)})
- El navegador emite una solicitud de OPCIONES HTTP con los siguientes encabezados;
Encabezado 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;
Encabezado de respuesta - OPCIONES (ESTADO = 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 luego se detiene. El navegador, en teoría, debería emitir una solicitud POST ya que el servidor respondió con los encabezados CORS correctos (?) (Access-Control-Allow-Origin: *)
Para solucionar problemas, también he emitido el mismo comando $ .post de http://jquery.com . Aquí es donde estoy perplejo, desde jquery.com, la solicitud de publicación funciona, una solicitud de OPCIONES se envía a continuación por una POST. Los encabezados de esta transacción están a continuación;
Encabezado 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 (ESTADO = 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 (ESTADO = 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 en un sitio, pero no en el otro. Espero que alguien pueda señalar lo que me estoy perdiendo. ¡Gracias por tu ayuda!