什么是同源策略
瀏覽器出于安全考慮抱完,只允許與本域的接口交互訪問(wèn)贼陶,
不同源的客戶端腳本在沒(méi)有明確授權(quán)的情況下, 不能讀寫(xiě)對(duì)方的資源
同源是指:js腳本只能訪問(wèn)或者請(qǐng)求相同協(xié)議巧娱,相同域名,相同端口的頁(yè)面烘贴。
同源(本域)必須滿足3個(gè)條件:
1 相同協(xié)議
比如: 都是 http或者h(yuǎn)ttps
2 相同域名
比如: http://baidu.com/wenku.html 與 http://baidu.com/eee.php
3 相同端口 禁添, 默認(rèn)為80端口
比如: http://localhost:8080/aaa.html http://localhost:8080/bbb.htnl
什么是跨域?跨域有幾種實(shí)現(xiàn)形式
就是在不同的域之間進(jìn)行訪問(wèn)和數(shù)據(jù)傳輸桨踪,當(dāng)前瀏覽器的頁(yè)面的URL與請(qǐng)求的的URL不是一個(gè)域老翘,調(diào)用不同域的接口
四種跨域方式:
- jsonp
- CORS
- 降域
- postMessage
***跨域問(wèn)題其實(shí)就是瀏覽器的機(jī)制問(wèn)題,也考慮到了安全性锻离。
JSONP 的原理是什么
先說(shuō)一下為什么要用script標(biāo)簽實(shí)現(xiàn)跨域铺峭。
因?yàn)樵陧?yè)面上有三種資源是可以與頁(yè)面本身不同源的。
所以它們是可以鏈接訪問(wèn)到不同源的資源的汽纠。訪問(wèn)不同源就是跨域卫键。
它們是:js腳本,css樣式文件虱朵,圖片莉炉。
跨域的前提條件是 服務(wù)器愿意提供這么一個(gè)接口供使用’
自己必須在前臺(tái)事先創(chuàng)建一個(gè)包裹服務(wù)器傳過(guò)來(lái)的數(shù)據(jù)的函數(shù)
而jsonp就是利用了<script>標(biāo)簽可以鏈接到不同源的js腳本,來(lái)到達(dá)跨域目的碴犬。
利用 頁(yè)面上 script 標(biāo)簽可以跨域絮宁,并且其 src 指定的js腳本到達(dá)瀏覽器會(huì)執(zhí)行的特性,我們可以進(jìn)行跨域取得數(shù)據(jù)服协。
js腳本向服務(wù)器請(qǐng)求數(shù)據(jù)绍昂,服務(wù)器把早已指定聲明存放數(shù)據(jù)的函數(shù)中存放數(shù)據(jù),然后返回
jsop缺點(diǎn):
但是只能在get 請(qǐng)求,
也不像ajax那樣直接的獲取數(shù)據(jù)
可能受到入侵窘游,如果服務(wù)器給了一個(gè)假數(shù)據(jù)或者是一個(gè)危險(xiǎn)的js唠椭,作為js執(zhí)行,可能有獲取cookie或者其他重要信息的危險(xiǎn)
CORS是什么
跨域資源共享张峰,是通過(guò)ajax跨域請(qǐng)求資源的方式泪蔫,支持現(xiàn)代瀏覽器和IE10以上
怎么實(shí)現(xiàn)跨域呢?
只要看訪問(wèn)的地址是不是符合服務(wù)器的要求喘批,在服務(wù)器端加入一個(gè)響應(yīng)頭撩荣,Access-Control-Allow-Origin,當(dāng)瀏覽器查看返回的響應(yīng)頭包含origin時(shí),瀏覽器處理響應(yīng)饶深,可以拿到響應(yīng)數(shù)據(jù)餐曹。