JavaScript跨域(1):什么是跨域,如何跨域


  無數次看到:Origin null is not allowed by Access-Control-Allow-Origin , 網絡沒有讓你絕望,但是或許會讓你蛋疼,因為你找了半天沒看到一個比較實用的解決方案,亦或者水平不夠,別人寫的東西累贅沒看懂,抑或是。。。

  網上看到了一篇文章——跨域資源共享的10中方式,已經放在自己的家里了O(∩_∩)O~

  跨域也是平時項目中比較讓人頭疼的一個玩意兒,上文只是簡要地提出了有哪些跨域方式,這里呢,將向大家詳細說明,各種使用頻率比較高的跨域方式。

  什么是跨域:

cross-domain solution (CDS) is a means of information assurance that provides the ability to manually or automatically access or transfer between two or more differing security domains.

  上面是從wiki上引用過來的。意思是:解決兩個安全域之間的信息傳遞,這個就叫做CDS——跨域解決方案。首先解釋下怎么樣的兩個域之間的數據傳輸需要跨越。

 

What [什么是跨域]

  JavaScript出於安全方面的考慮,不允許跨域調用其他頁面的對象。但在安全限制的同時也給注入iframe或是ajax應用上帶來了不少麻煩。這里把涉及到跨域的一些問題簡單地整理一下:

  首先什么是跨域,簡單地理解就是因為JavaScript同源策略的限制,a.com 域名下的js無法操作b.com或是c.a.com域名下的對象。更詳細的說明可以看下表:

URL 說明 是否允許通信
http://www.a.com/a.js
http://www.a.com/b.js
同一域名下 允許
http://www.a.com/lab/a.js
http://www.a.com/script/b.js
同一域名下不同文件夾 允許
http://www.a.com:8000/a.js
http://www.a.com/b.js
同一域名,不同端口 不允許
http://www.a.com/a.js
https://www.a.com/b.js
同一域名,不同協議 不允許
http://www.a.com/a.js
http://70.32.92.74/b.js
域名和域名對應ip 不允許
http://www.a.com/a.js
http://script.a.com/b.js
主域相同,子域不同 不允許
http://www.a.com/a.js
http://a.com/b.js
同一域名,不同二級域名(同上) 不允許(cookie這種情況下也不允許訪問)
http://www.cnblogs.com/a.js
http://www.a.com/b.js
不同域名 不允許

 

same-origin policy [同源策略]

  在客戶端編程語言中,如javascript和ActionScript,同源策略是一個很重要的安全理念,它在保證數據的安全性方面有着重要的意義。同源策略規定跨域之間的腳本是隔離的,一個域的腳本不能訪問和操作另外一個域的絕大部分屬性和方法。

  那么什么叫相同域,什么叫不同的域呢?當兩個域具有相同的協議(如http), 相同的端口(如80),相同的host(如www.example.org),那么我們就可以認為它們是相同的域。比如http://www.example.org/和http://www.example.org/sub/是同域,而http://www.example.org, https://www.example.org, http://www.example.org:8080, http://sub.example.org中的任何兩個都將構成跨域。同源策略還應該對一些特殊情況做處理,比如限制file協議下腳本的訪問權限。本地的html文件在瀏覽器中是通過file協議打開的,如果腳本能通過file協議訪問到硬盤上其它任意文件,就會出現安全隱患,目前IE8還有這樣的隱患。

  受到同源策略的影響,跨域資源共享就會受到制約。但是隨着人們的實踐和瀏覽器的進步,目前在跨域請求的技巧上,有很多寶貴經驗的沉淀和積累。這里我把跨域資源共享分成兩種,一種是單向的數據請求,還有一種是雙向的消息通信。

 

How [如何跨域]

  你可以看看這個提綱,跨域十法,也可以等等,我會很詳細很具體地告訴你如何跨域~

  O(∩_∩)O哈哈~

  下一節將給大家細說JSONP方法跨域。

 

Reference [參考資料]

  1.wiki

  2.瘋狂小強

  3.Rain Man


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM