如何實現(xiàn)跨域
跨域應(yīng)該是我們經(jīng)常會遇到的問題,解決跨域也應(yīng)當(dāng)是前端人員必備的技能;如當(dāng)下很多網(wǎng)站都開始轉(zhuǎn)向https,那么很容易就會出現(xiàn)http和https之間跨域的問題;下面就來闡述一下實現(xiàn)跨域的幾種方法:
JSONP
JSONP實現(xiàn)跨域的方法應(yīng)該是我們最常用的方法,它主要是利用<script>標(biāo)簽沒有跨域的限制去實現(xiàn)跨域;因為通過<script>標(biāo)簽可以去引用任何網(wǎng)站的腳本資源,沒有任何的限制,所以就有人利用這個特性搞了一些事情,通過src引入的腳本資源通過后端配合處理,會返回一個回調(diào)函數(shù),這個回調(diào)函數(shù)里面是json格式的數(shù)據(jù),只需要執(zhí)行這個回調(diào)函數(shù)即可,那么在這之前本地腳本里已經(jīng)創(chuàng)建了相應(yīng)的回調(diào)函數(shù),只要等這個<script>標(biāo)簽加載完畢就會立即執(zhí)行,這時就會得到不同源的數(shù)據(jù);
CORS
CORS方法實現(xiàn)跨域這一方法是最簡單的,前端也就是和正常ajax請求數(shù)據(jù)完全一樣,只需要后端做相應(yīng)的處理就可以了;后端會在響應(yīng)頭里加上Access-Control-Allow-Origin允許哪些網(wǎng)站進(jìn)行跨域,如果請求的網(wǎng)站是被允許的那么就能拿到相應(yīng)的數(shù)據(jù),如果這個網(wǎng)站沒有被允許則請求失??;這個方法有一個缺陷就是兼容性的問題,要在ie以上瀏覽器才能支持;所以這個方法在移動端使用的可能更多一些,PC端如果要兼容低版本的ie可能就不大適合了;
降域
第三種方法要說的是降域,這個方法用起來也是比較簡單,利用document.domain去允許不同的二級域之間的跨域;如a.taobao.com和b.taobao.com,如果設(shè)置了document.domain = 'taobao.com',那么a.taobao.com和b.taobao.com就可以實現(xiàn)跨域;但是有一點需要注意的是,不同頂級域名之間是沒法通過降域去實現(xiàn)跨域的,如a.taobao.com和b.baidu.com,這兩者之間再怎么降域也實現(xiàn)不了跨域;
以上就是解決跨域最常用的方法,我們可以根據(jù)自己具體的業(yè)務(wù)場景去使用相應(yīng)的方法;