Ich habe einen Computer auf meinem lokalen LAN (machineA) mit zwei Webservern. Die erste ist die in XBMC (auf Port 8080) integrierte und zeigt unsere Bibliothek an. Der zweite Server ist ein CherryPy-Python-Skript (Port 8081), mit dem ich bei Bedarf eine Dateikonvertierung auslöse. Die Dateikonvertierung wird durch eine AJAX POST-Anforderung von der vom XBMC-Server bereitgestellten Seite ausgelöst.
- Gehe zu http: // machineA: 8080 welche zeigt Bibliothek
- Bibliothek wird angezeigt
- Der Benutzer klickt auf den Link 'Konvertieren', der den folgenden Befehl ausgibt:
jQuery Ajax-Anfrage
$.post('http://machineA:8081', {file_url: 'asfd'}, function(d){console.log(d)})
- Der Browser gibt eine HTTP OPTIONS-Anforderung mit den folgenden Headern aus.
Request Header - OPTIONEN
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
- Der Server antwortet wie folgt:
Antwortheader - OPTIONEN (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
- Das Gespräch wird dann beendet. Der Browser sollte theoretisch eine POST-Anfrage ausgeben, da der Server mit den richtigen (?) CORS-Headern geantwortet hat (Access-Control-Allow-Origin: *).
Zur Fehlerbehebung habe ich auch den gleichen Befehl $ .post von http://jquery.com ausgegeben . Hier bin ich ratlos, von jquery.com aus funktioniert die Post-Anfrage, eine OPTIONS-Anfrage wird gefolgt von einem POST gesendet. Die Header dieser Transaktion sind unten aufgeführt.
Request Header - OPTIONEN
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
Antwortheader - OPTIONEN (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
Request Header - 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
Antwortheader - 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
Ich kann nicht herausfinden, warum dieselbe Anfrage von einer Site aus funktioniert, aber nicht von der anderen. Ich hoffe, dass jemand darauf hinweisen kann, was mir fehlt. Danke für Ihre Hilfe!