webpack 配置 changeOrigin 无效的说明(转载)

简单明了,反正我是差点忘了。

以下这段话来自官网:https://webpack.js.org/configuration/dev-server/#devserverproxy

The origin of the host header is kept when proxying by default, you can set changeOrigin to true to override this behaviour. It is useful in some cases like using name-based virtual hosted sites.

上面这句话是说:当进行代理时,Host 头部的源默认会保持原装;你可以设置 changeOrigin 为 true 来覆盖这种行为。

假设,如果你的前端服务器是 http://localhost:3000,后端是 http://localhost:8082。

那么后端通过 request.getHeader("Host") 获取依旧是 http://localhost:3000。

如果你设置了 changeOrigin: true,那么后端通过 request.getHeader("Host") 获取才是 http://localhost:8082。代理服务器此时会根据请求的 target 地址修改 Host。

 

changeOrigin 的配置主要体现在 proxy 代理设置上,一般会这样设置:

module.exports = {
  //...
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:80',
        changeOrigin: true
      }
    }
  }
};
 

有些人可能会通过浏览器 F12 查看 request Header 的 Host,发现它无论怎么修改 changeOrigin,它均为前端服务器地址(http://localhost:3000)。于是就认为 changeOrigin: true 无效。其实不然。而且,设置已经生效了,只是浏览器不会直观地显示给你。

 

你需要通过后端进行 request.getHeader("Host") 打印,你就能发现区别了。

当不设置 changeOrigin 的时候,后端输出 http://localhost:3000

当设置 changeOrigin: true 的时候,后端输出 http://localhost:8082

 

这大约是因为,浏览器只是将第一层请求显示给你,也就是发给代理服务器的请求,而修改 Host 的工作是代理服务器做的,浏览器当然不会显示 Host 已经被修改的状态!

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值