什么是同源策略
- 瀏覽器出于安全方面的考慮酒奶,只允許與本域下的接口交互咧叭。不同源的客戶端腳本在沒有明確授權(quán)的情況下迫横,不能讀寫對(duì)方的資源除破。
- 同協(xié)議:如都是http或https
- 同域名:如都是http://baidu.com/a和http://baidu.com/b
- 對(duì)于當(dāng)前頁(yè)面來說頁(yè)面存放的JS文件的域不重要累榜,重要的是加載該JS頁(yè)面所在什么域
- 同端口:如都是80端口
什么是跨域欠气?跨域有幾種實(shí)現(xiàn)方式
- JSONP
- CORS
- 降域
- postMessage
JSONP的原理是什么
- JSONP是通過script標(biāo)簽加載數(shù)據(jù)的方式去獲取數(shù)據(jù)當(dāng)做JS代碼來執(zhí)行率触,提前在頁(yè)面上聲明一個(gè)函數(shù)抵碟,函數(shù)名通過接口傳參的方式傳給后臺(tái),后臺(tái)解析到函數(shù)名后在原始數(shù)據(jù)上【包裹】這個(gè)函數(shù)名贷盲,發(fā)送給前端淘这。換句話說JSONP需要對(duì)應(yīng)接口的后端的配合才能實(shí)現(xiàn)
CORS是什么
- CORS全稱是跨域資源共享(Cross-Origin Resourse Sharing),是一種ajax跨域請(qǐng)求資源的方式晃洒,支持現(xiàn)代瀏覽器慨灭,IE支持10以上。實(shí)現(xiàn)方式很簡(jiǎn)單球及,當(dāng)你使用XMLHttpRequest發(fā)送請(qǐng)求時(shí)氧骤,瀏覽器發(fā)現(xiàn)該請(qǐng)求不符合同源策略,會(huì)給該請(qǐng)求加一個(gè)請(qǐng)求頭:origin吃引,后臺(tái)進(jìn)行一系列處理筹陵,如果確定接收請(qǐng)求則在返回結(jié)果中加入一個(gè)相應(yīng)投:Access-Control-Allow-Origin;瀏覽器判斷該相應(yīng)頭中是否包含Origin的值,如果有則瀏覽器會(huì)處理響應(yīng)镊尺,我們就可以拿到響應(yīng)數(shù)據(jù)朦佩,如果不包含瀏覽器直接駁回,這時(shí)我們無(wú)法拿到響應(yīng)數(shù)據(jù)庐氮。所以CORS的表象是讓你覺得它與同源的ajax請(qǐng)求沒啥區(qū)別语稠,代碼完全一樣
實(shí)現(xiàn)跨域的方法
如何偽裝一個(gè)網(wǎng)站(在本地)
1.編輯hosts文件
mac: sudo vi/etc/hosts
windows:https://jingyan.baidu.com/article/b907e627d86be046e6891c41.html
2.添加一行127.0.0.1 xxx.com
3 保存關(guān)閉
4訪問xxx.com:端口號(hào)
注意:端口號(hào)一定要加上,因?yàn)槎丝谔?hào)是不能被映射的
如何監(jiān)聽80端口
1.mac:sudo http-server -c-1 -p80
2.windows:
1以管理員身份運(yùn)行g(shù)itbash
2http-server -c-1 -p 80
一個(gè)服務(wù)器只能監(jiān)聽一個(gè)端口