在前端開發(fā)中,“跨域”是繞不過去的,了解跨域之前,先要知道瀏覽器的同源策略
同源策略:請求的url地址,必須與瀏覽器上的url地址處于同域上,也就是域名,端口,協(xié)議相同。
當(dāng)你的請求地址和瀏覽器上的url地址不一樣的時候,由于同源策略,將請求不到資源,將無法“跨域”獲取資源。
我的理解是:跨域這個問題只存在于頁面的異步請求之中,比如ajax,vue中的axios等,因為同步請求,直接就在瀏覽器的地址欄將目標(biāo)地址打開了,不存在請求地址與瀏覽器地址不一致的情況。
但也有特殊情況,比如img標(biāo)簽和script標(biāo)簽的src屬性,是可以獲取到外部資源,天生可以跨域。
解決跨域有很多種辦法,最近的項目中使用的辦法我認(rèn)為是最好的一種,即:配置webpack中的proxyTable。
話不多說,請看代碼:
proxyTable: {
'/list': {
target:'http://api.xxxxxxxx.com',
pathRewrite: {'^/list':'/list' }
}
}
此時,從前端向后臺請求“/list”這個地址的時候,在瀏覽器看到的url前綴是你本地運行服務(wù)"localhost:XXXX",但實際上,你請求的地址是'http://api.xxxxxxxx.com'。
為什么這樣做可以成功跨域呢?其實,是因為你本地的node服務(wù)將你的請求做了一個代理,然后,請記住這句話,你就豁然開朗了:
同源策略是瀏覽器需要遵循的標(biāo)準(zhǔn),而如果是服務(wù)器向服務(wù)器請求就無需遵循同源策略。