題目1: 什么是同源策略
所謂同源是指,域名,協(xié)議趣避,端口相同洼裤。假如沒有同源策略,你現(xiàn)在打開了瀏覽器,在一 個窗口中打開了銀行網(wǎng)站,在另外一個tab窗口中打開了一個惡意網(wǎng)站,而那個惡意網(wǎng)站掛了一個的專門修改銀行信息的JavaScript肤视,當(dāng)你訪問 這個惡意網(wǎng)站并且執(zhí)行它JavaScript時,你的銀行頁面就會被這個JavaScript修改涉枫,后果會非常嚴(yán)重邢滑。
本域指的是?
同協(xié)議:如都是http或者https
同域名:如都是http://jirengu.com/a 和http://jirengu.com/b
同端口:如都是80端口
如:
http://jirengu.com/a/b.js 和 http://jirengu.com/index.php (同源)
不同源的例子:
http://jirengu.com/main.js 和 https://jirengu.com/a.php (協(xié)議不同)
http://jirengu.com/main.js 和 http://bbs.jirengu.com/a.php (域名不同愿汰,域名必須完全相同才可以)
http://jiengu.com/main.js 和 http://jirengu.com:8080/a.php (端口不同,第一個是80)
需要注意的是: 對于當(dāng)前頁面來說頁面存放的 JS 文件的域不重要困后,重要的是加載該 JS 頁面所在什么域,也就是我們平常再script標(biāo)簽中能夠引入其他域
題目2: 什么是跨域衬廷?跨域有幾種實現(xiàn)形式
跨域顧名思義就是突破同源策略的限制摇予,去不同的域下訪問數(shù)據(jù)。 主要有如下幾種實現(xiàn)形式:
jsonp
CORS:跨域資源共享(Cross-Origin Resource Sharing)
降域
postMessage()
題目3: JSONP 的原理是什么
1.首先在客戶端注冊一個callback, 然后把callback的名字傳給服務(wù)器吗跋。
2.服務(wù)器先生成 json 數(shù)據(jù)侧戴。
3.然后以 javascript 語法的方式,生成一個function , function 名字就是傳遞上來的參數(shù) jsonp.
4.最后將 json 數(shù)據(jù)直接以入?yún)⒌姆绞降穑胖玫?function 中酗宋,這樣就生成了一段 js 語法的文檔,返回給客戶端疆拘。
5.客戶端瀏覽器蜕猫,解析script標(biāo)簽,并執(zhí)行返回的 javascript 文檔哎迄,此時數(shù)據(jù)作為參數(shù)回右,傳入到了客戶端預(yù)先定義好的 callback 函數(shù)里.
題目4: CORS是什么
跨域資源共享,簡單來說就是指定哪些符合條件的域名下的請求是被接受的稀颁,其他的都阻止。
實現(xiàn)方式是楣黍,當(dāng)你使用XMLHttpRequest發(fā)送請求時,瀏覽器發(fā)現(xiàn)該請求不符合同源策略棱烂,會給該請求加一個請求頭:Origin租漂,后臺進行一系列處理,如果確定接受請求則在返回結(jié)果中加入一個響應(yīng)頭:Access-Control-Allow-Origin; 瀏覽器判斷該相應(yīng)頭中是否包含Origin 的值颊糜,如果有則瀏覽器會處理響應(yīng)哩治,我們就可以拿到響應(yīng)數(shù)據(jù),如果不包含瀏覽器直接駁回衬鱼,這時我們無法拿到響應(yīng)數(shù)據(jù)业筏。
題目5: 根據(jù)視頻里的講解演示三種以上跨域的解決方式
JSONP方法:
返回結(jié)果為:
CORS:
跨域:
PostMessage: