1浇衬、跨域是什么金吗?
1)廣義的跨域:指一個域下的文檔或腳本試圖去請求另一個域下的資源十兢。
??? a)資源跳轉: 鏈接、重定向摇庙、表單提交
??? b)資源嵌入:link,script,img等帶src屬性的標簽等
??? c)腳本請求: js發(fā)起的ajax請求旱物、dom和js對象的跨域操作等
2)我們通常所說的跨域是狹義的,是由瀏覽器同源策略限制的卫袒。
??? a宵呛、同源策略/SOP(Same origin policy):同源是指“協(xié)議+域名+端口"三者相同,即便兩個不同的域名指向同一個ip地址夕凝,也非同源宝穗。(這是一種約定封孙,由Netscape公司1995年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能讽营,如果缺少了同源策略,瀏覽器很容易受到XSS泡徙、CSFR等攻擊橱鹏。所謂)
??? b、同源策略限制以下幾種行為:
??????? 1.) Cookie堪藐、LocalStorage 和 IndexDB 無法讀取
??????? 2.) DOM 和 Js對象無法獲得
??????? 3.) AJAX 請求不能發(fā)送
??? c莉兰、常見跨域場景
2、跨域解決方案
1)通過JSONP跨域
JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式礁竞,而JSONP(JSON with Padding)則是JSON 的一種“使用模式”糖荒,通過這種模式可以實現(xiàn)數(shù)據(jù)的跨域獲取。?
JSONP跨域的原理:在同源策略下模捂,在某個服務器下的頁面是無法獲取到該服務器以外的數(shù)據(jù)的捶朵,但img、iframe狂男、script等標簽是個例外综看,這些標簽可以通過src屬性請求到其他服務器上的數(shù)據(jù)。利用script標簽的開放策略岖食,我們可以實現(xiàn)跨域請求數(shù)據(jù)红碑,當然,也需要服務端的配合泡垃。當我們正常地請求一個JSON數(shù)據(jù)的時候析珊,服務端返回的是一串JSON類型的數(shù)據(jù),而我們使用JSONP模式來請求數(shù)據(jù)的時候蔑穴,服務端返回的是一段可執(zhí)行的JavaScript代碼忠寻。
在jQuery中如何通過JSONP來跨域獲取數(shù)據(jù)
??? a)在ajax函數(shù)中設置dataType為 'jsonp' :?
??? b、利用getJSON來實現(xiàn)存和,只要在地址中加上callback=?參數(shù)即可:?
2)document.domain + iframe跨域
3) location.hash + iframe
4) window.name + iframe跨域
5) postMessage跨域
6) 跨域資源共享(CORS)
7) nginx代理跨域
8) node.js中間件代理跨域
9) WebSocket協(xié)議跨域