Tengo una máquina en mi LAN local (machineA) que tiene dos servidores web. El primero es el integrado en XBMC (en el puerto 8080) y muestra nuestra biblioteca. El segundo servidor es un script python CherryPy (puerto 8081) que estoy usando para activar una conversión de archivos a pedido. La conversión de archivos se desencadena mediante una solicitud AJAX POST desde la página servida desde el servidor XBMC.Cómo obtener una solicitud de intercambio de recursos de origen cruzado (CORS) que funciona
- Goto http://machineA:8080 que muestra la biblioteca
- Biblioteca se muestra
- usuario hace clic en 'convertir' eslabón que emite el siguiente comando -
jQuery Ajax Solicitud
$.post('http://machineA:8081', {file_url: 'asfd'}, function(d){console.log(d)})
- El navegador emite un HT TP OPCIONES solicita 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 el siguiente;
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: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, en teoría, debe emitir una solicitud POST ya que el servidor respondió con los encabezados CORS correctos (? Access-Control-Allow-Origin: *)
Para la solución de problemas, también emití los mismos $ comando .post desde http://jquery.com. Aquí es donde estoy perplejo, desde jquery.com, la solicitud de publicación funciona, una solicitud de OPCIONES se envía después de un POST. Los encabezados de esta transacción están debajo;
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
Respuesta Header - 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 - Publique
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
Respuesta Header - 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 petición funcionaría de un sitio, pero no el otro. Espero que alguien pueda señalar lo que me estoy perdiendo. ¡Gracias por tu ayuda!
Se necesita CORS si ambos servidores web están en el mismo equipo? – jdigital
Según mi leal saber y entender, se trata de una solicitud CORS debido al puerto diferente. Además, la solicitud OPTIONS indica que el navegador lo está tratando como una solicitud CORS – James
Posible duplicado de [Una solicitud CORS POST funciona desde JavaScript simple, pero ¿por qué no con jQuery?] (Https://stackoverflow.com/questions/5584923/ a-cors-post-request-works-from-plain-javascript-but-why-not-with-jquery) – Liam