Yerel LAN (machineA) üzerinde iki web sunucusu olan bir makinem var. Birincisi, XBMC'deki (8080 bağlantı noktasında) yerleşik olanıdır ve kütüphanemizi görüntüler. İkinci sunucu, talep üzerine bir dosya dönüştürmeyi tetiklemek için kullandığım bir CherryPy python betiğidir (bağlantı noktası 8081). Dosya dönüştürme XBMC sunucusundan sunulan sayfadan bir AJAX POST isteği ile tetiklenir.
- Goto http: // MachineA: 8080 hangi görüntüler kütüphane
- Kütüphane görüntülenir
- Kullanıcı aşağıdaki komutu veren 'dönüştür' bağlantısını tıklar -
jQuery Ajax İsteği
$.post('http://machineA:8081', {file_url: 'asfd'}, function(d){console.log(d)})
- Tarayıcı aşağıdaki başlıklarla bir HTTP SEÇENEKLERİ isteği gönderir;
Talep Başlığı - SEÇENEKLER
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
- Sunucu aşağıdakileri yanıtlar;
Yanıt Başlığı - SEÇENEKLER (DURUM = 200 Tamam)
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
- Daha sonra konuşma durur. Teorik olarak, sunucu doğru (?) CORS başlıklarıyla (Access-Control-Allow-Origin: *) yanıt verirken, bir POST isteği yayınlamalıdır.
Sorun giderme için http://jquery.com adresinden de aynı $ .post komutunu verdim . Burada güdük olduğum yer, jquery.com, posta isteği çalışır, bir POST tarafından sonra bir SEÇENEKLER isteği gönderilir. Bu işlemin başlıkları aşağıdadır;
Talep Başlığı - SEÇENEKLER
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
Yanıt Başlığı - SEÇENEKLER (DURUM = 200 Tamam)
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
Başlık İsteği - 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
Yanıt Başlığı - 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
Aynı isteğin neden bir siteden işe yaradığını, diğerinin işe yaramadığını anlayamıyorum. Birisinin eksik olduğumu gösterebileceğini umuyorum. Yardımınız için teşekkürler!