首先强调的是webpack proxy只能用作于开发阶段,临时解决本地请求服务器(通常是测试服)产生的跨域问题,并不适用线上环境。配置在webpack的 devServer属性中
配置在
package.json的proxy也一样
原理
一句话总结:本地服务器充当代理服务器,使得请求不受浏览器同源策略的限制。
webpack 的 devServer开启了本地服务器。配置了proxy之后,本地服务器作为代理服务器,每次请求都会被本地服务器拦截。
本地服务器帮我们向真正有资源的服务器发起请求,以此获取真正的资源,使得前端发起的请求不受浏览器同源策略的限制。
- 如果我们没有使用 proxy,请求是这样发送的

- 如果我们使用了 proxy,请求是这样发送的
更多细节
devServer使用了[http-proxy-middleware](https://github.com/chimurai/http-proxy-middleware),而http-proxy-middleware是基于[http-proxy](https://github.com/http-party/node-http-proxy)实现的
webpack 的配置方法
代理到某个域名
module.exports = {//...devServer: {proxy: 'http://localhost:3000'}};
这样写,发起的任何请求,都会代理到
http://localhost:3000如果只想代理某类路径,比如说
/apimodule.exports = {//...devServer: {proxy: {'/api': 'http://localhost:3000'}}};
假如现在,对
/api/users的请求会将请求代理到http://localhost:3000/api/users如果不希望代理
/api,就重写路径module.exports = {//...devServer: {proxy: {'/api': {target: 'http://localhost:3000',pathRewrite: {'^/api' : ''}}}}};
如果想将多个路径,用
contextmodule.exports = {//...devServer: {proxy: [{context: ['/auth', '/api'],target: 'http://localhost:3000',},],},};
参考资料
