在前端開(kāi)發(fā)中,“跨域”是繞不過(guò)去的壤圃,了解跨域之前陵霉,先要知道瀏覽器的同源策略
同源策略:請(qǐng)求的url地址,必須與瀏覽器上的url地址處于同域上,也就是域名,端口,協(xié)議相同。
當(dāng)你的請(qǐng)求地址和瀏覽器上的url地址不一樣的時(shí)候伍绳,由于同源策略踊挠,將請(qǐng)求不到資源,將無(wú)法“跨域”獲取資源冲杀。
我的理解是:跨域這個(gè)問(wèn)題只存在于頁(yè)面的異步請(qǐng)求之中效床,比如ajax,vue中的axios等权谁,因?yàn)橥秸?qǐng)求剩檀,直接就在瀏覽器的地址欄將目標(biāo)地址打開(kāi)了,不存在請(qǐng)求地址與瀏覽器地址不一致的情況旺芽。
但也有特殊情況沪猴,比如img標(biāo)簽和script標(biāo)簽的src屬性,是可以獲取到外部資源采章,天生可以跨域运嗜。
解決跨域有很多種辦法,最近的項(xiàng)目中使用的辦法我認(rèn)為是最好的一種悯舟,即:配置webpack中的proxyTable洗出。
話不多說(shuō),請(qǐng)看代碼:
proxyTable: {
'/list': {
target:'http://api.xxxxxxxx.com',
pathRewrite: {'^/list':'/list' }
}
}
此時(shí)图谷,從前端向后臺(tái)請(qǐng)求“/list”這個(gè)地址的時(shí)候,在瀏覽器看到的url前綴是你本地運(yùn)行服務(wù)"localhost:XXXX"阱洪,但實(shí)際上便贵,你請(qǐng)求的地址是'http://api.xxxxxxxx.com'。
為什么這樣做可以成功跨域呢冗荸?其實(shí)承璃,是因?yàn)槟惚镜氐膎ode服務(wù)將你的請(qǐng)求做了一個(gè)代理,然后蚌本,請(qǐng)記住這句話盔粹,你就豁然開(kāi)朗了:
同源策略是瀏覽器需要遵循的標(biāo)準(zhǔn),而如果是服務(wù)器向服務(wù)器請(qǐng)求就無(wú)需遵循同源策略程癌。