jQuery Ajax Notları
- Tarayıcı güvenlik kısıtlamaları nedeniyle, çoğu Ajax isteği aynı kaynak politikasına tabidir ; istek, farklı bir etki alanından, alt etki alanından, bağlantı noktasından veya protokolden başarılı bir şekilde veri alamaz.
- Komut dosyası ve JSONP istekleri, aynı kaynak politikası kısıtlamalarına tabi değildir.
Alanlar arası engelin üstesinden gelmenin bazı yolları vardır :
Etki alanları arası isteklerde yardımcı olan bazı eklentiler vardır :
Dikkat et!
Bu sorunun üstesinden gelmenin en iyi yolu, arka uçta kendi proxy'nizi oluşturmaktır, böylece proxy'niz diğer etki alanlarındaki hizmetleri işaret eder, çünkü arka uçta aynı başlangıç ilkesi kısıtlaması yoktur. Ancak bunu arka planda yapamazsanız, aşağıdaki ipuçlarına dikkat edin.
Uyarı!
Üçüncü taraf proxy'leri kullanmak güvenli bir uygulama değildir, çünkü verilerinizi takip edebilirler, böylece herkese açık bilgilerle kullanılabilir ancak asla özel verilerle kullanılamaz.
Aşağıda gösterilen kod örnekleri jQuery.get () ve jQuery.getJSON () kullanır , her ikisi de jQuery.ajax () 'ın kısa yöntemleridir.
CORS Anywhere
CORS Anywhere, proxy'li isteğe CORS başlıklarını ekleyen bir node.js proxy'sidir .
API'yi kullanmak için, URL'nin önüne API URL'si eklemeniz yeterlidir. (Destekler https : bkz github depo )
Gerektiğinde alanlar arası istekleri otomatik olarak etkinleştirmek istiyorsanız aşağıdaki parçacığı kullanın:
$.ajaxPrefilter( function (options) {
if (options.crossDomain && jQuery.support.cors) {
var http = (window.location.protocol === 'http:' ? 'http:' : 'https:');
options.url = http + '//cors-anywhere.herokuapp.com/' + options.url;
//options.url = "http://cors.corsproxy.io/url=" + options.url;
}
});
$.get(
'http://en.wikipedia.org/wiki/Cross-origin_resource_sharing',
function (response) {
console.log("> ", response);
$("#viewer").html(response);
});
Menşei ne olursa olsun
Origin , etki alanları arası bir jsonp erişimidir . Bu, anyorigin.com'a açık kaynaklı bir alternatiftir .
Verileri google.com'dan almak için şu pasajı kullanabilirsiniz:
// It is good specify the charset you expect.
// You can use the charset you want instead of utf-8.
// See details for scriptCharset and contentType options:
// http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings
$.ajaxSetup({
scriptCharset: "utf-8", //or "ISO-8859-1"
contentType: "application/json; charset=utf-8"
});
$.getJSON('http://whateverorigin.org/get?url=' +
encodeURIComponent('http://google.com') + '&callback=?',
function (data) {
console.log("> ", data);
//If the expected response is text/plain
$("#viewer").html(data.contents);
//If the expected response is JSON
//var response = $.parseJSON(data.contents);
});
CORS Proxy
CORS Proxy, herhangi bir web sitesi için CORS talebini etkinleştirmek için basit bir node.js proxy'sidir . Sitenizdeki javascript kodunun, normalde aynı kaynak politikası nedeniyle engellenecek olan diğer alanlardaki kaynaklara erişmesine izin verir.
O nasıl çalışır? CORS Proxy, HTML 5 ile birlikte eklenen bir özellik olan Çapraz Kaynak Paylaşımından yararlanır. Sunucular, tarayıcıların diğer web sitelerinin barındırdıkları kaynakları talep etmesine izin vermesini istediklerini belirtebilir. CORS Proxy'si, yanıtlara "herkes bunu talep edebilir" diyen bir başlık ekleyen bir HTTP Proxy'sidir.
Bu, hedefe ulaşmanın başka bir yoludur (bkz. Www.corsproxy.com ). Tek yapmanız gereken http: // ve www'yi çıkarmak . vekaleten URL'den alın ve URL'yi başına ekleyinwww.corsproxy.com/
$.get(
'http://www.corsproxy.com/' +
'en.wikipedia.org/wiki/Cross-origin_resource_sharing',
function (response) {
console.log("> ", response);
$("#viewer").html(response);
});
CORS proxy tarayıcısı
Son zamanlarda bunu buldum, çeşitli güvenlik odaklı Cross Origin Remote Sharing araçlarını içeriyor. Ancak, arka uç olarak Flash içeren bir kara kutudur.
Burada eylem halinde görebilirsiniz: CORS proxy tarayıcısı
Kaynak kodunu GitHub'dan alın: koto / cors-proxy-browser