vue服務器代理proxyTable配置如何解決跨域
服務器代理proxyTable配置解決跨域
1、Proxy代理作用
proxy代理作用:前端服務器代理的作用是,告訴服務器任何未知請求(沒有匹配到靜態(tài)文件的請求),代理到一個另一個地址,從而解決跨域的問題。
2、常見情況
前端在向后端進行資源請求的時候,后端若沒有使用Cros中間件,則會出現(xiàn)跨域問題,解決問題的辦法之一就是前端使用Proxy進行服務器代理。
3、應用方式
在使用vue-cli2創(chuàng)建的vue項目時,在config文件夾下的index.js文件中,可以在dev相關配置信息中的proxyTable里對一個或者多個服務器進行代理。

注:
proxyTable是vue-cli提供解決vue開發(fā)環(huán)境下跨域的方法,proxyTable的底層使用了http-proxy-middleware,他是http代理中間件,他依賴node.js,基本原理是用服務器代理解決跨域瀏覽器跨域。
有時候在開發(fā)的時候,我們請求的后代接口和vue不在同一個域名產生了跨域,而后臺服務器并未開啟cors,這個時候需要配置proxyTable解決跨域問題。
4、具體配置實例
proxyTable:{
//'api'就等于target,在鏈接里訪問/api等同于http:/182.xx.xx.xx:8888/
'/api':{
target:'http://182.xx.xx.xxx:8888/', //服務器的接口地址
secure:ture, //如果是https,需要開啟這個選項
changeOrigin:ture, //是否跨域請求?ture
pathRewrite:{
'/^api':'api/'
//如果真實接口里包含了/api,就需要這樣配置
//等價于/^api=/api+api==http://182.xx.xx.xxx:8888/api
}
}
}5、配置思路
在某次網(wǎng)絡請求完整路徑為 '/api/ynai/static/ai/'的時候,出現(xiàn)了跨域的問題,之后需要再前端對該網(wǎng)絡請求進行一次服務器代理
具體配置如下:
①首先代理標志名,必須與請求路徑中頭部一致,示例代碼如下:proxyTable:{ '/api' : { } }
②配置target參數(shù),確定請求代理的服務器根路徑,代碼示例如下:

③根據(jù)需要確定ws(websocket代理)的布爾值

④配置changeOrigin,賦值為ture,允許跨域

⑤根據(jù)需要配置pathRewrite參數(shù)
若最終代理后的路徑中不需要/api,那么需要配置pathRewrite的參數(shù)對路徑進行重寫為 ' '

代理原理:
假設有如下代理配置:

則:
1、發(fā)生網(wǎng)絡請求時,代理配置文件會去正則匹配網(wǎng)絡請求路徑,是否與代理匹配(比如發(fā)生的請求為/aaa/static/ai/,代理配置了 '/aaa ',則匹配成功)
2、匹配成功后,代理配置生效,他將會請求/aaa/static/ai/,經過代理配置指定的方式處理,最后拼接到target指向的服務器根路徑(http://www.baidu.com/)后面
3、最終形成完整的請求路徑(http://www.baidu.com/static/ai),跨域問題也得以解決
小結: 前端進行服務器代理配置的視乎,必須保證代理配置文件能夠匹配到axious請求的url,才能正確的將target指向的服務器地址與url拼接得到完整的跨域請求路徑,進而才能夠請求到遠端的資源。
Vue.proxyTable是什么?
在vue項目中的config文件夾下的index文件中有一個proxyTable節(jié)點。

proxyTable是vue-cli腳手架在開發(fā)模式下,為我們提供的一個跨域的代理中轉服務器服務。它是基于http-proxy-middleware插件的。
為什么會有proxyTable存在?
在我開發(fā)我的畢業(yè)設計:一個基于vue+springboot的手機交易網(wǎng)站的時。因為我采用前后端分離,前端用的是node服務器,后端用的是tomcat服務器。因此,因為端口不一樣所以涉及跨域。

正常情況下,無法通過ajax向后臺請求到數(shù)據(jù)。因為跨域,瀏覽器的同源策略,截獲了這次數(shù)據(jù)的返回。
解決方法:
1、服務器開啟cors。
2、用代理服務器中轉一下(vue請求的還是自己的后臺,讓后臺去請求需要數(shù)據(jù)的后臺,然后再將數(shù)據(jù)返回給vue。
倘若我們無法從后臺設置cors來進行跨域支持。那我們就只能通過配置proxyTable來進行跨域了。
配置proxyTable
proxyTable跨域的基本原理:
在開發(fā)模式下,webpack會為我們提供一個http代理服務器。我們請求接口的時候,實際上是請求的webpack提供的這個http代理服務器。在由這個代理服務器請求真實的數(shù)據(jù)服務器。最后數(shù)據(jù)經由webpack代理服務器。最后轉交給vue程序。

為什么加個代理服務器就可以了?
因為代理服務器不是瀏覽器,沒有同源策略限制。
proxyTable: {
// 這里配置 '/api' 就等價于 target , 你在鏈接里訪問 /api === http://localhost:54321
'/api': {
target: 'http://localhost:54321/', // 真是服務器的接口地址 // http://localhost:54321/json.data.json,
secure: true, // 如果是 https ,需要開啟這個選項
changeOrigin: true, // 是否是跨域請求?肯定是啊,不跨域就沒有必要配置這個proxyTable了.
pathRewirte: {
// 這里是追加鏈接,比如真是接口里包含了 /api,就需要這樣配置.
'/^api': 'api/',
// 等價于
// step 1 /api = http://localhost:54321/
// step 2 /^api = /api + api == http://localhost:54321/api
}
}
},總結。
1、proxyTable就是webpack在開發(fā)環(huán)境中給我們提供的的一個代理服務器。
2、目的是為了在服務器不方便開啟跨域功能的時候,我們也能方便的在開發(fā)階段發(fā)送ajax跨域請求。
3、真實發(fā)布環(huán)境中讓后臺開啟cors就好。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Vue Router中獲取路由傳遞過來的參數(shù)(方法詳解)
在VueRouter中,可以通過動態(tài)路由匹配和查詢參數(shù)`query`來傳遞參數(shù),并將路由參數(shù)或查詢參數(shù)作為組件的`props`傳遞,動態(tài)路由匹配使用`route.params`訪問參數(shù),查詢參數(shù)使用`route.query`訪問,本文給大家介紹Vue Router中獲取路由傳遞過來的參數(shù),感興趣的朋友一起看看吧2025-02-02
Vue中keyup.enter和blur事件沖突的問題及解決
這篇文章主要介紹了Vue中keyup.enter和blur事件沖突的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
elementui的table列超出隱藏tooltip懸浮顯示問題
這篇文章主要介紹了elementui的table列超出隱藏tooltip懸浮顯示問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
vue Treeselect下拉樹只能選擇第N級元素實現(xiàn)代碼
這篇文章主要介紹了vue Treeselect下拉樹只能選擇第N級元素實現(xiàn)代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
關于下拉類型多選組件Vue-Treeselect(鍵名轉換)
這篇文章主要介紹了關于下拉類型多選組件Vue-Treeselect(鍵名轉換),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
解決vue-cli@3.xx安裝不成功的問題及搭建ts-vue項目
這篇文章主要介紹了解決vue-cli@3.xx安裝不成功的問題及搭建ts-vue項目.文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02

