Nasıl cross-origin resource sharing (CORS) bir post isteği çalışma almak için
İki web sunucusu olan benim yerel lan (machineA) bir makine var. İlk yerleşik XBMC (port 8080) ve görüntüler kütüphanemiz. İkinci sunucu isteğe bağlı bir dosya dönüştürme tetiklemek için kullanıyorum CherryPy bir python betiği (port 8081). Dosya dönüştürme sayfa XBMC sunucu hizmet, AJAX POST isteği ile tetiklenir.
- Kütüphane gösteren http://machineA:8080 git
- Kütüphane görüntülenir
- Kullanıcı 'convert' aşağıdaki komutu - sorunları olan link . 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ıkları SEÇENEKLERİ ile HTTP isteği verir;
İstek 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ğıdaki ile yanıt verir;
Yanıt Başlığı - SEÇENEKLER (= 200 OK DURUM)
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
- Konuşmanın ardından durur. Teoride doğru olan sunucu cevabı olarak YAZILAN bir isteği olmalıdır tarayıcı, (?) KÖŞELERİ başlıklar (- Control-Allow-Access Kökeni: *)
Sorun giderme için, aynı zamanda aynı ülkede yaşıyoruz $.http://jquery.com post komutu. Bu işler jquery.com gelen SEÇENEKLER isteği üzerine bir YAZI gönderilir şaşkın, nerede olduğumu. Bu işlem başlıkları altında;
İstek 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 (= 200 OK DURUM)
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
İstek Başlığı - YAZI
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ığı - YAZI (= 200 OK DURUM)
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ği bir site değil, diğer iş neden çözemiyorum. Birini özlüyorum ne işaret edebilir umuyorum. Yardımlarınız için teşekkürler!
CEVAP
Nihayet bu bağlantıyı üzerine "A CORS POST request works from plain javascript, but why not with jQuery?" jQuery 1.5.1 ekler notlar . tökezledi
Access-Control-Request-Headers: x-requested-with
tüm KÖŞELERİ istekleri Başlığı. jQuery 1.5.2 bu yapmaz. Ayrıca, aynı soruya göre, sunucu yanıtı ayar Başlığı
Access-Control-Allow-Headers: *
yanıt devam etmek izin vermiyor. Yanıt başlığını özellikle gerekli başlıklar içerir emin olmak gerekir. yani:
Access-Control-Allow-Headers: x-requested-with
Nasıl node.js cross-origin resource sh...
Nasıl UTF-8 Java web uygulamalarını ça...
bir HTTP POST isteği gerçekleştirmek i...
Nasıl RelativeLayout birleştirme ve he...
Amazon KÖŞELERİ (Cross-Origin Resource...