httpclient 连接路由
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类型的值。
如果这个参数没有被设置,那么就使用默认的规则建立连接到目标服务器
httpclient 连接路由的更多相关文章
- httpClient 连接池问题出现403.9
困扰了半个月时间终于找到连接池的问题,由于调用第三方有异常导致连接不能及时释放 所以写了一个定时扫描释放连接 监控连接池释放连接: public static class IdleConnection ...
- (五)HttpClient 连接超时及读取超时
第一节: HttpClient 连接超时及读取超时 HttpClient连接超时及读取超时 httpClient在执行具体http请求时候 有一个连接的时间和读取内容的时间: HttpClient连接 ...
- HttpClient连接超时及读取超时
HttpClient连接超时及读取超时 httpClient在执行具体http请求时候 有一个连接的时间和读取内容的时间: HttpClient连接时间 所谓连接的时候 是HttpClient发送请求 ...
- HttpClient连接池的一些思考
前言 使用apache的httpclient进行http的交互处理已经很长时间了,而httpclient实例则使用了http连接池,想必大家也没有关心过连接池的管理.事实上,通过分析httpclien ...
- HttpClient连接池设置引发的一次雪崩
事件背景 我在凤巢团队独立搭建和运维的一个高流量的推广实况系统,是通过HttpClient 调用大搜的实况服务.最近经常出现Address already in use (Bind failed)的问 ...
- Http持久连接与HttpClient连接池
一.背景 HTTP协议是无状态的协议,即每一次请求都是互相独立的.因此它的最初实现是,每一个http请求都会打开一个tcp socket连接,当交互完毕后会关闭这个连接. HTTP协议是全双工的协议, ...
- Http 持久连接与 HttpClient 连接池
一.背景 HTTP协议是无状态的协议,即每一次请求都是互相独立的.因此它的最初实现是,每一个http请求都会打开一个tcp socket连接,当交互完毕后会关闭这个连接. HTTP协议是全双工的协议, ...
- HttpClient连接池
HttpClient连接池,发现对于高并发的请求,效率提升很大.虽然知道是因为建立了长连接,导致请求效率提升,但是对于内部的原理还是不太清楚.后来在网上看到了HTTP协议的发展史,里面提到了一个属性C ...
- HttpClient实战三:Spring整合HttpClient连接池
简介 在微服务架构或者REST API项目中,使用Spring管理Bean是很常见的,在项目中HttpClient使用的一种最常见方式就是:使用Spring容器XML配置方式代替Java编码方式进行H ...
随机推荐
- 20145303刘俊谦 Exp7 网络欺诈技术防范
20145303刘俊谦 Exp7 网络欺诈技术防范 1.实验后回答问题 (1)通常在什么场景下容易受到DNS spoof攻击 局域网内的攻击,arp入侵攻击和DNS欺骗攻击 公共wifi点上的攻击. ...
- 20145327 《网络对抗》Web安全基础实践
20145327 <网络对抗>Web安全基础实践 实践过程 webgoat开启 java -jar webgoat-container-7.0.1-war-exec.jar 在浏览器输入l ...
- linux平台关闭某个进程的脚本
在开发LINUX平台下的程序时,经常需要为我们的开发的程序写启动程序和关闭程序的脚本. 启动脚本比较好做,关闭程序脚本如下: 具体思路是通过ps命令找到程序的进程ID号,然后通过Kill命令将程序Ki ...
- Spring Aop的理解和简单实现
1.AOP概念 所说的面向切面编程其实就是在处理一系列业务逻辑的时候这一系列动作看成一个动作集合.比如连接数据库来说: 加载驱动-----获取class--------获取连接对象-------访问数 ...
- C#预处理器指令【转】
本文转载自:http://www.cnblogs.com/miffylf/p/4005223.html C#有许多名为预处理器指令的命令.这些命令从来不会转化为可执行代码中的命令,但会影响编译过程的各 ...
- git源码阅读
https://github.com/git-for-windows/git/issues/1854 https://github.com/git-for-windows/git/pull/1902/ ...
- Win7系统中如何查看当前文件被哪一个程序占用了
https://superuser.com/questions/117902/find-out-which-process-is-locking-a-file-or-folder-in-windows ...
- 【分词器及自定义】Elasticsearch中文分词器及自定义分词器
中文分词器 在lunix下执行下列命令,可以看到本来应该按照中文”北京大学”来查询结果es将其分拆为”北”,”京”,”大”,”学”四个汉字,这显然不符合我的预期.这是因为Es默认的是英文分词器我需要为 ...
- 3:JavaScript中的各类语句
上面我们说完了数据类型和基本运算 下面说的就是各种类型的语句 --- ---------------------------------------------------------------- ...
- 常见dos命令汇总
常用的内部命令有md.cd.rd.dir.path.copy.type.edit.ren.del.cls.ver.date.time.prompt.常用的外部命令有deltree.format.dis ...