跨域的由來
跨域問題來源于JavaScript的同源政策,表示隻有 協定+域名+端口号 (如存在)相同,即相同的域,則允許互相通路。也就是說JavaScript隻能通路和操作自己域下的資源,不能通路和操作其他域下的資源。
當一個請求url的協定、域名、端口三者之間的任意一個與目前頁面url不同即為跨域。跨域的本質是浏覽器基于同源政策的一種安全的手段,是一種約定,它是浏覽器最核心也是最基本的安全功能。注意伺服器之間的請求是不存在跨域問題的!
如下:圖檔轉自 https://blog.moonlet.cn/archives/563
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CM4gzMyQjYmJTY4EmN2E2NxYzX0IDMwcTM4IzLcBTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
請求一個接口時浏覽器控制台出現'Access-Control-Allow-Origin'就說明請求跨域了。
vue-cli4.x配置 proxy 代了解決跨域
原理:
- 将域名發送給本地的伺服器
- 再由本地的伺服器去請求真正的伺服器
- 因為請求是從伺服器端發出的,是以就不存在跨域的問題了
module.exports = {
devServer: {
host: 'localhost',
port: '8080',//端口号為前端的端口号
proxy: {
'/api': { // 比對所有以 '/api'開頭的請求路徑
target: 'http://localhost:4000', // 代理目标的基礎路徑
changeOrigin: true, // 允許跨域
pathRewrite: {// 重寫路徑: 去掉路徑中開頭的'/api'
'^/api': ''
}
}
},
}
}