Ho una macchina sulla mia lan locale (machineA) che ha due server web. Il primo è quello integrato in XBMC (sulla porta 8080) e mostra la nostra libreria. Il secondo server è uno script Python CherryPy (porta 8081) che sto utilizzando per attivare una conversione di file su richiesta. La conversione del file viene attivata da una richiesta AJAX POST dalla pagina servita dal server XBMC.
- Vai a http: // machineA: 8080 che visualizza la libreria
- Viene visualizzata la libreria
- L'utente fa clic sul collegamento "converti" che emette il seguente comando:
jQuery Ajax Request
$.post('http://machineA:8081', {file_url: 'asfd'}, function(d){console.log(d)})
- Il browser invia una richiesta HTTP OPTIONS con le seguenti intestazioni;
Intestazione richiesta - OPZIONI
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
- Il server risponde con quanto segue;
Intestazione risposta - OPZIONI (STATO = 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 conversazione quindi si interrompe. Il browser, in teoria, dovrebbe emettere una richiesta POST poiché il server ha risposto con le intestazioni CORS corrette (?) (Access-Control-Allow-Origin: *)
Per la risoluzione dei problemi, ho anche emesso lo stesso comando $ .post da http://jquery.com . Qui è dove mi trovo perplesso, da jquery.com, la richiesta di post funziona, una richiesta di OPZIONI viene inviata seguita da un POST. Le intestazioni di questa transazione sono di seguito;
Intestazione richiesta - OPZIONI
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
Intestazione risposta - OPZIONI (STATO = 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
Intestazione richiesta - 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
Intestazione risposta - 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
Non riesco a capire perché la stessa richiesta potrebbe funzionare da un sito, ma non dall'altro. Spero che qualcuno possa essere in grado di sottolineare cosa mi manca. Grazie per l'aiuto!