Mam komputer w lokalnej sieci LAN (machineA), który ma dwa serwery WWW. Pierwszy to wbudowany w XBMC (na porcie 8080) i wyświetla naszą bibliotekę. Drugi serwer to skrypt Pythona CherryPy (port 8081), którego używam do wyzwalania konwersji plików na żądanie. Konwersja pliku jest wyzwalana przez żądanie AJAX POST ze strony obsługiwanej z serwera XBMC.
- Idź do http: // machineA: 8080, która wyświetla bibliotekę
- Wyświetlana jest biblioteka
- Użytkownik klika link „Konwertuj”, który wydaje następujące polecenie -
jQuery Ajax Request
$.post('http://machineA:8081', {file_url: 'asfd'}, function(d){console.log(d)})
- Przeglądarka wysyła żądanie OPCJE HTTP z następującymi nagłówkami;
Żądanie nagłówka - OPCJE
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
- Serwer odpowiada następującymi informacjami;
Nagłówek odpowiedzi - OPCJE (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
- Następnie rozmowa się kończy. Przeglądarka powinna teoretycznie wysłać żądanie POST, ponieważ serwer odpowiedział poprawnymi (?) Nagłówkami CORS (Access-Control-Allow-Origin: *)
Do rozwiązywania problemów wydałem również to samo polecenie $ .post z http://jquery.com . To jest miejsce, w którym jestem zaskoczony, z jquery.com, żądanie postu działa, żądanie OPTIONS jest wysyłane po POST. Nagłówki tej transakcji znajdują się poniżej;
Żądanie nagłówka - OPCJE
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
Nagłówek odpowiedzi - OPCJE (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
Żądanie nagłówka - 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
Nagłówek odpowiedzi - 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
Nie mogę zrozumieć, dlaczego to samo żądanie zadziała z jednej strony, ale nie z drugiej. Mam nadzieję, że ktoś będzie w stanie wskazać, czego mi brakuje. Dzięki za pomoc!