2012-09-22 13 views
16

JavaScript komut dosyalarına CDN gibi bir bulut bulutundan sunmak istiyorum.Aynı-Origin İlkesi ve bir CDN'den JS sunumu

Şimdi komut dosyalarım ajax aracılığıyla uygulama sunucumla iletişim kurar. Bu komut dosyalarını bir CDN'den yüklediğimde aynı kökenli politika kısıtlamaları devreye girmez mi?

benim app etki alanında olduğunu varsayalım:

http://app.com 

Ve komut benim uygulaması alanınızdan farklı bir etki alanından yüklenen beri, Şimdi

http://cdn.com/xyz/all.js 

benim komut dosyaları yüklemeye Bence aynı köken politikası benim app ile ajax iletişimini yapmamı engelleyecektir.

Yanlış bir şey mi alıyorum?

cevap

19

Hayır, işe yarayacaktır. Bu yüzden JSONP çalışıyor. Komut dosyasının "kaynağı", yürütüldüğü sayfa değil, yürütüldüğü sayfadır. bunu sen istedin gibi

, şaşırtıcı bir şekilde, aynı Kökeni Politikası ile sınırlı değildir,

src niteliği burada referans (Ben hiç iyi bulamadık, ama Crockford iyi bilinir). Bu, herhangi bir sunucuya gidebilen, komut dosyası getirebilen ve çalıştırabilen bir komut dosyası öğesi oluşturulabilir. Komut dosyası JSON kodlu verilerin teslim edilmesine neden oluyorsa, bu çok yararlı bir şeydir. Ne yazık ki, senaryoyu kısıtlamak ya da yürütmeden önce incelemek için hiçbir yol yoktur. Bu sayfadan komut dosyaları ile aynı yetkiyle çalışır. Böylece betik çerezlerine erişebilir ve kullanabilir. Kullanıcının yetkilendirmesini kullanarak kaynak sunucuya erişebilir. DOM ve JavaScript genel nesnesini inceleyebilir ve dünyanın herhangi bir yerinde bulduğu bilgileri gönderebilir. Script Tag Hack güvenli değildir ve kaçınılmalıdır. Gerçekten http://javascript.crockford.com/script.html

Değil referans

: Bu işe yaramaz, kimse Google'ın CDN dan jQuery dahil ve sonra $.ajax yöntemidir kullanabilirsiniz.

+0

JSONP'nin çalışmasının nedeni, her yerden ** GET ** komutları girebilmenizdir. Ama yapmam gereken, betiğin başlangıcından farklı bir alana sahip olan bir sunucuya ** POST **. Lütfen cevabınızı biraz daha netleştirin – treecoder

+0

Şimdi iki şeyi karıştırıyorsunuz. Komut dosyanız CDN'den * GET * kullanılarak getirilir. Bundan sonra, app.com – Prinzhorn

+0

alanında yaşıyor, ne elde ettiğimi bilmiyorum, ancak A alanından yüklenen bir betik B alanına doğru veri gönderemez mi? Haklıysam, CDN'den yüklenen bir komut dosyası uygulama sunucusunun tamamen farklı bir alanına nasıl konuşabilir? – treecoder