HttpClient正確設定Host的姿勢(不需要自定義DNS解析類)
阿新 • • 發佈:2019-02-01
因為有負載均衡的考慮,前端用了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不同)。