JavaScript跨域問題探究一

傳聞JavaScript跨域問題是每個JavaScript程序員必須熟知的一個問題,自己不知,那就充電吧。於是搜到一帖。

原帖提問:

今天搞一個網頁的時候遇到了一個問題,我通過ajax的xmlhttp的open方法請求一個其他網站的php頁面,瀏覽器不響應,爲什麼不得行?這種情況算跨域訪問嗎?
另外,我用js提交一個表單到其他網站的頁面,用form.submit(),這樣是可以的,同樣都是請求頁面,這和第一種情況有什麼區別?

下面是我挑選出感覺比較靠譜的解釋:

域(Domain)是Windows網絡中獨立運行的單位,域之間相互訪問則需要建立信任關係(即Trust Relation)。信任關係是連接在域與域之間的橋樑。當一個域與其他域建立了信任關係後,2個域之間不但可以按需要相互進行管理,還可以跨網分配文件和打印機等設備資源,使不同的域之間實現網絡資源的共享與管理。 有一種簡明的說法來解釋廣域跨域:跨域訪問,簡單來說就是 A 網站的 javascript 代碼試圖訪問 B 網站,包括提交內容和獲取內容。由於安全原因,跨域訪問是被各大瀏覽器所默認禁止的。
在廣域網環境中,由於瀏覽器的安全限制,網絡連接的跨域訪問時不被允許的,XmlHttpRequest也不例外。但有時候跨域訪問資源是必需的。
同源策略阻止從一個域上加載的腳本獲取或操作另一個域上的文檔屬性。也就是說,受到請求的 URL 的域必須與當前 Web 頁面的域相同。這意味着瀏覽器隔離來自不同源的內容,以防止它們之間的操作。同源策略不阻止將動態腳本元素插入文檔中。
參考理論一:在瀏覽器中不能直接來跨域訪問,而在服務器端沒有跨域安全限制。
這樣的話,可以在服務端完成跨域訪問,而在客戶端來取得結果就可以了。
參考理論二:同源策略不阻止動態腳本元素插入,腳本訪問可以跨域。



發佈了74 篇原創文章 · 獲贊 5 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章