changeOrigin:将主机标头的来源更改为目标URL
这是 http-proxy 上的一个字段,一般设置成true
比如现在这个场景: 本地起了一个 web 服务,需要的 /api 接口是其他人提供的,这个时候一般会利用 webpack 的 proxy 字段。如果其他服务提供的是 IP:PORT 的形式,直接配置就可以了。但是如果提供的是域名,简单的代理就不行了。
因为域名很可能会经过其他的代理转发,http-proxy 会将我们的原请求的域名转发出去。本地的 web 服务会是 localhost, 那么后续的代理就无法转发了。
设置 changeOrigin 字段,http-proxy 就会把转发的域名修改了,这样后续的代理转发就能正常运作了。
所以一般来说 changeOrigin 设置为 true 就没有问题了
but。。。
如果 http-proxy 是代理是最后一层,即: 转发之后直接打到 IP:PORT , 如果 changeOrigin 还是设置为 true 的话, 那么很遗憾, server 端将只能从请求中读取到 localhost 或者 本机的 IP, 域名信息就丢失了。
问题:
既然 host 信息丢失了,whistle 是怎么识别出管理界面的 host name 呢:
http-proxy 转发的时候,如果设置了
xfwd
为true
会添加以下 headers: 'x-forwarded-host': 'w2ui.live-editor.webdev.test.gifshow.com',
'x-forwarded-proto': 'http',
'x-forwarded-port': '80',
'x-forwarded-for': '::1',
如果有该字段的话 whistle 会使用 forward-host 代替 Host 字段