SORU
21 NİSAN 2011, PERŞEMBE


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
22 NİSAN 2011, Cuma


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 

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HTC Tutorials

    HTC Tutorial

    21 EYLÜL 2010
  • Jonathan Morrison

    Jonathan Mor

    24 Mart 2010
  • Skrillex

    Skrillex

    6 NİSAN 2010