2012-09-22 28 views
16

我想從CDN如cloudflare服務我的JavaScript腳本。同源策略和來自CDN的JS提供服務

現在我的腳本通過ajax與我的應用程序服務器進行通信。當我從CDN加載這些腳本時,不會出現同源策略限制嗎?

比方說,我的應用程序是在域:

http://app.com 

我從

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

加載我的腳本現在,因爲我的劇本是從不同的域與域我的應用程序加載從我運行,我想同樣的原產地政策會阻止我與我的應用程序進行Ajax通信。

我錯了嗎?

回答

19

不,它會工作。這就是JSONP工作的原因。 腳本的「起源」是它執行的頁面,而不是它來自哪裏。

至於你問吧,這裏有一個參考(我找不到任何好轉,但克羅克福德是衆所周知的)

src屬性,奇怪的是,不被同源策略的限制。這意味着可以創建一個腳本元素,它可以訪問任何服務器,獲取腳本並執行它。如果腳本導致JSON編碼數據的傳遞,那麼這是非常有用的。不幸的是,沒有辦法限制腳本或在執行腳本之前檢查腳本。它以與頁面腳本相同的權限運行。所以腳本可以訪問和使用它的cookies。它可以使用用戶的授權訪問始發服務器。它可以檢查DOM和JavaScript全局對象,併發送它在世界任何地方找到的任何信息。 Script Tag Hack不安全,應該避免。

http://javascript.crockford.com/script.html

不是一個真正的參考:如果這是行不通的,沒有人可以從谷歌的CDN包括jQuery的,然後使用它的方法$.ajax

+0

JSONP的工作原因是因爲您可以從任何地方** GET **腳本。但是我需要做的是** POST **到與腳本的起源不同的域的服務器。請澄清你的答案更多 – treecoder

+0

現在你正在混合兩件事。您的腳本使用CDN中的* GET *獲取。在那之後,它生活在app.com的域名 – Prinzhorn

+0

我不知道我不在這裏,但從域A加載的腳本不能將數據發送到域B的權利?如果我是對的,那麼從CDN加載的腳本如何與應用程序服務器的完全不同的域進行對話? – treecoder