1.什麼是跨域?
發起頁面的請求,與請求的伺服器,協定,端口,域名,其中有一項不相同的,就會産生跨域問題。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL0cGROJTQE9keRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2QzN4ATM1EjM2IDNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2.跨域錯誤原因
請求是跨域的,并不一定會報錯。普通的圖檔請求,css檔案請求是不會報錯的
出現跨域的條件:
浏覽器同源政策+請求是ajax請求+請求确實跨域了
跨域錯誤的本質出在浏覽器,是由于同源政策,不是出在伺服器端,伺服器是可以收到請求的
3.解決方案
目前比較流行的解決方案
1.前端用jsonp方式去發請求
2.後端開啟cors 在響應中添加必要的響應頭 ,讓響應回來之後浏覽器不在報錯
3.代理轉發
怎麼解決vue項目中的跨域問題
在
vue.config.js
這個配置檔案中,它有一項是devServer,它就是我們下邊要操作的主角。
module.exports = {
devServer: {
// 代理配置
proxy: {
// 如果請求位址以/api打頭,就出觸發代理機制
'/api': {
target: 'http://localhost:3000', // 我們要代理的真實接口位址
// http://localhost:9588/api/login -> http://localhost:3000/api/login
changeOrigin: true,
// 如果是false,後端到的請求中的host就是目前浏覽器的host:localhost:9588
// 如果是true, 後端收到的請求中的host就是target的值
// 路徑重寫
// 如果我們不光要使得域名修改,而且還需要改變其它路徑,則需要做路徑重寫
// 比如 我們想把api去掉
// http://localhost:9588/api/login -> http://localhost:3000/login
pathRewrite: {
'^/api': ''
}
}
}
}
}