Saya memiliki mesin di lan lokal saya (machineA) yang memiliki dua server web. Yang pertama adalah yang built-in di XBMC (pada port 8080) dan menampilkan perpustakaan kami. Server kedua adalah skrip python CherryPy (port 8081) yang saya gunakan untuk memicu konversi file sesuai permintaan. Konversi file dipicu oleh permintaan POST AJAX dari halaman yang disajikan dari server XBMC.
- Goto http: // machineA: 8080 yang menampilkan perpustakaan
- Perpustakaan ditampilkan
- Pengguna mengklik tautan 'convert' yang mengeluarkan perintah berikut -
Permintaan jQuery Ajax
$.post('http://machineA:8081', {file_url: 'asfd'}, function(d){console.log(d)})
- Browser mengeluarkan permintaan HTTP OPTIONS dengan header berikut;
Header Permintaan - OPSI
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
- Server merespons dengan yang berikut;
Header Respons - PILIHAN (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
- Percakapan kemudian berhenti. Browser, secara teori, harus mengeluarkan permintaan POST ketika server merespons dengan header CORS yang benar (? Access-Control-Allow-Origin: *)
Untuk pemecahan masalah, saya juga telah mengeluarkan perintah $ .post yang sama dari http://jquery.com . Di sinilah saya bingung, dari jquery.com, permintaan posting berfungsi, permintaan OPSI dikirim diikuti oleh POST. Tajuk dari transaksi ini di bawah;
Header Permintaan - OPSI
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
Header Respons - PILIHAN (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
Header Permintaan - 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
Header Respons - 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
Saya tidak tahu mengapa permintaan yang sama akan berfungsi dari satu situs, tetapi tidak yang lain. Saya berharap seseorang mungkin bisa menunjukkan apa yang saya lewatkan. Terima kasih atas bantuan Anda!