Webpack Proxy工作原理(本地跨域)

# 前言

? 首先強調的是webpack proxy只能用作于開發(fā)階段,臨時解決本地請求服務器(通常是測試服)產生的跨域問題线椰,并不適用線上環(huán)境。配置在webpack的 devServer 屬性中尘盼。

? 有人可能會誤會線上環(huán)境就是正式服憨愉,我們團隊曾就有人利用process.env.NODE_ENV來區(qū)分測試服和生產服。 其實不然卿捎。
? 對于node_env來說配紫,默認只有兩種狀態(tài)即developmentproduction,前者指代本地開發(fā)即localhost環(huán)境午阵,而后者代表發(fā)布在任何服務上的服務躺孝,node是不知道你服務是測試還是正式,除非你手動指定底桂。通常認為都是線上環(huán)境植袍。

# 設置 proxy 目的

? 為解決在本地開發(fā)時XHR異步請求跨域問題(如果你的后端小伙伴愿意給你處理,無需配置)

# 原理

? webpack中的proxy只是一層代理籽懦,用于把指定的path于个,代理去后端提供的地址,背后使用node來做server暮顺±辣簦可能有人疑惑,為什么只適用本地開發(fā)拖云?因為該技術只是在webpack打包階段在本地臨時生成了node server,來實現類似nginx 的proxy_pass的反向代理效果

? proxy工作原理實質上是利用http-proxy-middleware 這個http代理中間件应又,實現請求轉發(fā)給其他服務器宙项。例如:本地主機A為http://localhost:3000,該主機瀏覽器發(fā)送一個請求株扛,接口為/api尤筐,這個請求的數據(響應)在另外一臺服務器Bhttp://10.231.133.22:80上,這時洞就,就可以通過A主機設置webpack proxy盆繁,直接將請求發(fā)送給B主機。

var express = require('express');
var proxy = require('http-proxy-middleware');

var app = express();

app.use('/api', proxy({target: 'http://www.example.org', changeOrigin: true}));
app.listen(3000);

// http://localhost:3000/api/foo/bar -> http://www.example.org/api/foo/bar

? 必須配置changeOrigin= true

# 核心概念

var proxy = require('http-proxy-middleware');

var apiProxy = proxy('/api', {target: 'http://www.example.org'});
//                   \____/   \_____________________________/
//                     |                    |
//                   context             options
  • content:用于定義哪些請求需要被目標主機代理
  • option.target:目標主機(協(xié)議+主機名)

也可以簡寫 var apiProxy = proxy('http://www.example.org/api');

option的幾種配置
option.pathRewrite: 重寫目標的url路徑旬蟋,key用正則表達式來匹配路徑

// 重寫路徑
pathRewrite: {'^/old/api' : '/new/api'}

// 移除路徑
pathRewrite: {'^/remove/api' : ''}

// 添加基礎路徑
pathRewrite: {'^/' : '/basepath/'}

// 路徑自定義
pathRewrite: function (path, req) { return path.replace('/api', '/base/api') }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末油昂,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌冕碟,老刑警劉巖拦惋,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異安寺,居然都是意外死亡厕妖,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門挑庶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來言秸,“玉大人,你說我怎么就攤上這事迎捺【倩” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵破加,是天一觀的道長俱恶。 經常有香客問我,道長范舀,這世上最難降的妖魔是什么合是? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮锭环,結果婚禮上聪全,老公的妹妹穿的比我還像新娘。我一直安慰自己辅辩,他們只是感情好难礼,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著玫锋,像睡著了一般蛾茉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撩鹿,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天谦炬,我揣著相機與錄音,去河邊找鬼节沦。 笑死键思,一個胖子當著我的面吹牛,可吹牛的內容都是我干的甫贯。 我是一名探鬼主播吼鳞,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叫搁!你這毒婦竟也來了赔桌?” 一聲冷哼從身側響起供炎,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纬乍,沒想到半個月后碱茁,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡仿贬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年纽竣,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茧泪。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜓氨,死狀恐怖,靈堂內的尸體忽然破棺而出队伟,到底是詐尸還是另有隱情穴吹,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布嗜侮,位于F島的核電站港令,受9級特大地震影響,放射性物質發(fā)生泄漏锈颗。R本人自食惡果不足惜顷霹,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望击吱。 院中可真熱鬧淋淀,春花似錦、人聲如沸覆醇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽永脓。三九已至袍辞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間常摧,已是汗流浹背搅吁。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留排宰,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓那婉,卻偏偏與公主長得像板甘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子详炬,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350