Mashup'lar aynı kuruluş politikasıyla nasıl çalışır?


11

Javascript'in yalnızca aynı alan adından komut dosyalarına erişmesine izin verilirse, bir web sitesi başka bir alandan içeriği okuması ve değiştirmesi gereken mashup'lar nasıl oluşturabilir?

Yanıtlar:


7

Çapraz tarayıcı çözümleri

JSONP

Erişmeye çalıştığınız API JSONP'yi destekliyorsa, isteğinizde yalnızca bir javascript işlev adı sağlamanız gerekir, ardından JSONP myfunc({the:data});, normal bir javascript gibi çalışabileceğiniz javascript döndürür , bu nedenle yeni bir <script src="www.website.com/somecall?jsonp=myfunc">etiket oluşturursunuz. (kullanırsanız jQuery otomatik olarak yapar "bir istek göndermek" type: jsonpin $.ajaxistekleri).

Dezavantajı, JSONP'yi desteklemek için API sağlayıcısının gerektirmesidir.

flaş

Hedef web sitesinin crossdomain.xmlkökünde izin verdiğini belirten bir dosya olduğu sürece Flash, etki alanları arası içeriklere erişebilir ; bu genellikle bir API sağlayan sunucularda geçerlidir).

Dezavantajı, kullanıcının tarayıcısında Flash gerektirmesi ve veri aldığınız web sitesinin alanlar arası isteklere izin veren bir crossdomain.xml'ye sahip olması gerektiğidir.

Aynı alan adında sunucu tarafı komut dosyası

PHP gibi sunucu tarafı dillerinde BS aynı etki alanı kısıtlaması yoktur, bu nedenle proxy gibi davranan bir komut dosyanız olabilir (örn. CURL gibi http uzantılarından biri aracılığıyla indirme).

Ek avantaj, web sayfanıza / javascriptinize iletmeden önce sunucudaki verileri temizleyebilir (hatta birden fazla kaynağı karıştırabilirsiniz), böylece mobil web uygulaması yaparken güzel olan verilerin yalnızca yararlı kısmını bile çıkarabilirsiniz. burada bant genişliği bir sorun olabilir.

Dezavantajı, tüm isteklerin sunucunuz üzerinden gitmesi gerektiğinden, sunucunuzdaki yükü artırır.

Ancak bunun yararı, hedefler arası etki alanını veya jsonp'yi desteklemesini gerektirmediği için herhangi bir kaynakla çalışabilmesidir. Yani başka hiçbir şey çalışmazsa, bu işe yarar.


Bazı tarayıcılara özgü çözümler

Internet Explorer

Internet Explorer'ın Etki Alanları Arası İsteği Var

Firefox

Firefox 3.5+, çapraz kaynak paylaşım standardına sahiptir , ancak özel başlıklar (örneğin PHP'de) içermek için erişmeye çalıştığınız kaynak gerektirir:

header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");

Birkaç büyük tarayıcı da bunu destekliyor , bu nedenle eski tarayıcıları desteklemeniz gerekmiyorsa ve bu başlıkları göndermek için erişmeye çalıştığınız kaynaklara erişebiliyorsanız, bu sizin için en iyi seçenek olabilir, aksi takdirde sunucu tarafı senaryo benim tavsiyem olurdu.


Firefox'un bir kullanıcı ayarı da var capability.policy.default.XMLHttpRequest.open, ancak tarayıcısında bir ayarı değiştiren kullanıcıya güvenmem.


0

Bunun için API'yı (başka bir alan adından) kullanabilirsiniz. Javascriptiniz, web sunucunuzda (alan adınız) bulunan PHP dosyasını (veya başka bir komut dosyası) arayacak ve API'yı (CURL kullanan başka bir alan adının) çağıracak ve size yanıt alacaktır.


Bu yanıtın sunucuda kullanılan teknoloji hakkında çok özel olması gerekmez.
funkybro

@funkybro evet, bu sadece bir örnektir ... özel bir şey yok ...
Harish Kurup
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.