老規(guī)矩蒂阱,先上代碼
// 在根目錄下自行創(chuàng)建vue.config.js
module.exports = {
// cli3 代理是從指定的target后面開始匹配的猜扮,不是任意位置怜瞒;配置pathRewrite可以做替換
devServer: {
port: '8080',
open: true,
proxy: {
'/api': {
// /api 的意義在于鸯屿,聲明axios中url已/api開頭的請求都適用于該規(guī)則盏档,
// 注意是以/api開頭凶掰,即:axios.post({url: '/api/xxx/xxx'})
target: '服務(wù)器真實(shí)地址',
// 此處target的意義在于:造成跨域是因?yàn)樵L
// 問的host與我們的請求頭里的origin不一致,所以我們要設(shè)置成一致蜈亩,這個(gè)具體請看下文
changeOrigin: true,
pathRewrite: {'^/api': 'https://我是服務(wù)器/api'}
// 此處是大部分文章都不會(huì)明說的的地方懦窘,
// 既然我們設(shè)置了代理,則所有請求url都已寫成/api/xxx/xxx稚配,那請求如何知道我們到底請求的是哪個(gè)服務(wù)器的數(shù)據(jù)呢
// 因此這里的意義在于畅涂, 以 /api開頭的url請求,代理都會(huì)知道實(shí)際上應(yīng)該請求那里道川,
// ‘我是服務(wù)器/api’午衰,后面的/api根據(jù)實(shí)際請求地址決定立宜,即我的請求url:/api/test/test,被代理后請求的則是
// https://我是服務(wù)器/api/test/test
}
}
}
}
一個(gè)已經(jīng)代理成功的請求
微信圖片_20191211182354.png
如圖臊岸,可以看到Request URL中的host 和 請求頭中的 origin已經(jīng)一致了橙数,這就是為什么配置代理可以解決跨域的問題,
造成跨域是因?yàn)閞equest url的host與我們的origin不一致帅戒,也就是常說的灯帮,非同源,通過配置代理逻住,我的請求變成了從
192.168.1.109:8080(這是我本地的ip,解釋一下)向192.168.1.109:8080請求數(shù)據(jù)钟哥,則解決了非同源的問題,
人話模式
人話:代理服務(wù)器代替我們請求了服務(wù)器的數(shù)據(jù)返回給了我本機(jī)鄙信,我本機(jī)向我本機(jī)請求代理替我拿到的數(shù)據(jù)瞪醋,因此我不再需要考慮跨域了