HttpClient正确设置Host的姿势(不需要自定义DNS解析类)

来源:互联网 发布:淘宝客服经典回复技巧 编辑:程序博客网 时间:2024/05/17 07:37

因为有负载均衡的考虑,前端用了nginx反向代理。

两个域名虽然IP相同,但是如果不设置hosts文件,直接通过IP,是会返回404的。

所以需求就是这样,不设置hosts文件,而正确访问到对应的域名。

其实访问的IP是一样的,只是request header的Host不一样。

搜索到的解决方式:http://my.oschina.net/mikewei/blog/88606

这样有些不优雅,有点麻烦,而且我在httpClient3下,没找到对应的类。

只好debug跟踪源代码。

发现method.setRequestHeader("Host","a.xxxx.com")会被覆盖掉。

跟踪源代码发现,是HttpMethodBase类的addHostRequestHeader方法覆盖掉了。


如上,事情就好办了:

method.getParams().setVirtualHost("a.xxxx.com");

就OK了!

根本用不到自己实现一个DNS解析类。




关键代码就一行:getMethod.getParams().setVirtualHost("a.xxxx.com");

通过debug源代码找出的。。。

其实就是只要request header多一个Host:a.xxxx.com就行


补充:

想直接命中某个机器必须这样做。

否则直接用域名的方式,会负载均衡 不知道命中到哪台机器上(IP不同)。

0 0
原创粉丝点击