回到顶部


http路由

httpclient能够直接或通过路由建立连接到目标主机,这会涉及多个中间连接,也被称为跳。
Httpclient区分路由和普通连接,通道和分层。
通道连接到目标主机的多个中间代理的使用也被称为是代理链。
普通路由
连接直接连接到目标或仅通过一个代理来创建。
通道路由
通过代理链直接连接到目标来建立,没有代理的路由不是通道的,
分层路由
通过已存在的连接的分层协议来建立。协议仅仅可以在到目标的通道上火没有代理的直接连接上分层。

路由计算

RouteInfo接口代表关于最终涉及一个或多个中间步骤或跳目标主机路由的信息。
HttpRoute是RouteInfo的具体实现,这是不能改变的(不变的)。
HttpTraker是可变的RouteInfo的实现,有Httpclient在内部使用来跟踪到最大路由目标的剩余跳数。HttpTracker可以在成功执行项路由目标的下一跳之后更新。
HttpRouteDirector是一个帮助类,可以用来计算路由中的下一跳。这个类由HttpClient在内部使用
HttpRoutePlanner是一个代表计算到基于执行上下文到给定目标完成路由策略的接口。
HttpClient附带两个默认的HttpRoutePlanner实现。ProxySelectorRoutePlanner是基于java.NET.ProxySelector的。
默认情况下,它会从系统属性中或从运行应用程序的浏览器中选取JVM的代理设置。
DefaultHttpRoutePlanner实现即不使用任何java系统属性,也不使用系统或浏览器的代理设置,它只基于Http如下面描述的参数计算路由。

Http路由参数

http.route.default-proxy
定义可以被不使用JRE设置的默认路由规划者使用的代理主机。
这个参数期望得到一个HttpHost类型的值。
如果这个值没有被设置,那么就会尝试直接连接到目标。
http.route.local-address
定义一个本地地址有所有默认路由规划者来使用。
有多个网络接口的机器中,这个参数可以被用于从连接源中选择网络接口。
这个参数期望得到一个java.net.InetAddress类型的值。
如果这个参数参数没有被设置,将会自动使用本地地址
http.route.forced-route
定义了一个由所有默认路由规划者使用的强制路由。
代替了计算路由,给定的强制路由将会被返回,尽管指向一个完全不同的主机,这个参数期望得到一个httpRoute类型的值。
如果这个参数没有被设置,那么就使用默认的规则建立连接到目标服务器

posted on 2018-04-14 07:03  ssgao  阅读(850)  评论(0编辑  收藏  举报