1. 什么是同源策略
瀏覽器出于安全方面的考慮躯枢,只允許與本域下的接口交互黍檩。不同源的客戶端腳本在沒有明確授權的情況下穆趴,不能讀寫對方的資源只泼。
本域指的是:
- 同協(xié)議:如都是http,https,file,ssh,mailto,tel
- 同域名(在//后到第一個/之間):
如都是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)
2. 什么是跨域?跨域有幾種實現(xiàn)形式
跨域:
允許不同域的接口進行交互
跨域的幾種實現(xiàn)形式:
- JSONP
- CORS
- 降域
- postMessage
3. JSONP 的原理是什么
web服務器調用js文件不受是否跨域的影響(而且涧窒,帶有src屬性都可以跨域心肪,如:img iframe script)
JSONP就是依據(jù)這個特性,與web服務器調用腳本的方式一樣纠吴,來引入生成動態(tài)的js文件硬鞍,也就是引入在src里面輸入你要的后端文件。
JSONP需要向后臺傳入一個callback參數(shù)戴已,然后服務器返回的數(shù)據(jù)時callback函數(shù)會將數(shù)據(jù)包裹固该。
4. CORS是什么
前端用 XMLHttpRequest 跨域訪問時,瀏覽器會在請求頭中添加:origin
后端會添加一個響應頭:Access-Control-Allow-Origin
瀏覽器判斷該相應頭中Access-Control-Allow-Origin的值是否包含 Origin 的值恭陡,如果有則瀏覽器會處理響應蹬音,我們就可以拿到響應數(shù)據(jù),如果不包含瀏覽器直接駁回休玩,這時我們無法拿到響應數(shù)據(jù)著淆。