什么是同源策略
瀏覽器出于安全方面的考慮,只允許與本域下的接口交互腾誉。不同源的客戶端腳本在沒有明確授權(quá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)
需要注意的是: 對于當前頁面來說頁面存放的 JS 文件的域不重要牧牢,重要的是加載該 JS 頁面所在什么域
什么是跨域?跨域有幾種實現(xiàn)形式
從一個域名的網(wǎng)頁去請求另一個域名資源姿锭,嚴格意義上講只要協(xié)議 域名 端口有一個不同 就屬于跨域
JSONP
CORS
降域
postMessage
JSONP 的原理是什么
我們會發(fā)現(xiàn)在html下引入外界地址的script標簽是可行的塔鳍,比如各種框架。那么也就是說同源策略并沒有對script的src進行監(jiān)測呻此,而且script的特性是在頁面加載時會訪問script的src轮纫,那么我們可以將這個src想象成一個簡單的get請求,通過訪問這個地址焚鲜,我們可以配合后端對路由進行參數(shù)配置掌唾,使這段訪問的src中加入一些參數(shù),從而靈活的從后端調(diào)取數(shù)據(jù)
CORS是什么
"跨域資源共享"(Cross-origin resource sharing)
它允許瀏覽器向跨源服務(wù)器忿磅,發(fā)出XMLHttpRequest請求糯彬,從而克服了AJAX只能同源使用的限制。
實現(xiàn)方式是贝乎,當你使用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ù)但校。