十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这里简单解释一下httpclient一些关键参数的配置
创新互联公司自2013年创立以来,先为莘县等服务建站,莘县等地企业,进行企业商务咨询服务。为莘县企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
httpclient默认提供了一个策略
默认的话,是从response里头读timeout参数的,没有读到则设置为-1,这个代表无穷,这样设置是有点问题了,如果是https链接的话,则可能会经常报
HTTP规范没有确定一个持久连接可能或应该保持活动多长时间。一些HTTP服务器使用非标准的头部信息Keep-Alive来告诉客户端它们想在服务器端保持连接活动的周期秒数。如果这个信息可用,HttClient就会利用这个它。如果头部信息Keep-Alive在响应中不存在,HttpClient假设连接无限期的保持活动。然而许多现实中的HTTP服务器配置了在特定不活动周期之后丢掉持久连接来保存系统资源,往往这是不通知客户端的。
这里可以在此基础上重写一个,这里设置为5秒
官方提供了一个实例
在spring cloud netflix zuul中则提供了类似的定时器,只不过参数是写死的
spring-cloud-netflix-core/1.2.6.RELEASE/spring-cloud-netflix-core-1.2.6.RELEASE-sources.jar!/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java
httpcore-4.4.6-sources.jar!/org/apache/http/pool/PoolEntry.java
主要看
httpclient-4.5.3-sources.jar!/org/apache/http/impl/execchain/ConnectionHolder.java
这里设置了validDuration,会传给releaseConnection
httpclient-4.5.3-sources.jar!/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java
这里去updateExpiry,相当于更新了timeToLive
这里设置的是http连接池中connection的存活时间
httpclient-4.5.3-sources.jar!/org/apache/http/impl/client/HttpClientBuilder.java
httpclient-4.5.3-sources.jar!/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java
4.0的ThreadSafeClientConnManager,在4.2版本的时候被废弃了,默认使用PoolingHttpClientConnectionManager。这个manager有两个重要的参数,一个是maxTotal,一个是defaultMaxPerRoute。
httpclient-4.5.3-sources.jar!/org/apache/http/conn/routing/HttpRoute.java
HttpRoute对象是immutable的,包含的数据有目标主机、本地地址、代理链、是否tunnulled、是否layered、是否是安全路由。
httpclient-4.5.3-sources.jar!/org/apache/http/impl/client/IdleConnectionEvictor.java
builder默认会构造一个IdleConnectionEvictor
httpclient-4.5.3-sources.jar!/org/apache/http/impl/client/HttpClientBuilder.java
如果没有指定maxIdleTime的话,但是有设置evictExpiredConnections的话,默认是10秒
设置从连接池获取一个连接的请求超时时间( 连接池中连接不够用的时候等待超时时间 ),单位毫秒,可以设置为500ms
httpclient-4.5.3-sources.jar!/org/apache/http/impl/execchain/MainClientExec.java
设置重试策略
httpclient-4.5.3-sources.jar!/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.java
比如不重试,可以这样设置
当getKeepAliveDuration为-1以及connTimeToLive为-1的时候,closeExpiredConnections方法其实是没有用的,查看debug日志会出现
当getKeepAliveDuration不为-1的话,假设是5s,则日志可能是这样的
网站服务器运行段间down掉原能造种现象:比tomcat堆非堆内存设置足程序没能释放内存空间造内存溢或者某些进程直运行没能释放造cup资源量消耗除程序本身原能客服端访问造(客户端包含蜘蛛软件等搜索引擎)服务器客户端建立链接(用netstat -a命令查看网络访问信息)需要http响应connection做定设置
http1.1requestreponse header都能现connection字段header含义clientserver通信于链接何进行处理http1.1clientserver都默认支持链接 client使用http1.1协议希望使用链接则需要header指明connection值close;server想支持链接则response需要明确说明connection值close
论requestresponseheader包含值closeconnection都表明前使用tcp链接请求处理完毕断掉client再进行新请求必须创建新tcp链接
HTTP Connectionclose设置允许客户端或服务器任何关闭底层连接双都要求处理请求关闭TCP连接
何程序设置:滤器加入:response.setHeader(connection, close);
内容自: HTTP Keep-Alive详解
HTTP Keep Alive
HTTP Keep-Alive 程序误解面介绍HTTP/1.0HTTP/1.1版本何工作及其JAVA运行原理
HTTP请求响应模式典型范例即客户端向服务器发送请求信息服务器响应信息HTTP版本每请求都创建新客户端-服务器连接连接发送请求接收请求模式优点简单容易理解编程实现;缺点效率低Keep-Alive提用解决效率低问题
HTTP/1.0
HTTP/1.0版本并没官标准规定Keep-Alive何工作实际附加HTTP/1.0协议客户端浏览器支持Keep-AliveHTTP请求添加字段 Connection: Keep-Alive服务器收附带Connection: Keep-Alive请求响应添加同字段使用Keep-Alive客户端服务器间HTTP连接保持断(超Keep-Alive规定间意外断电等情况除外)客户端发送另外请求使用条已经建立连接
HTTP/1.1
HTTP/1.1版本官规定Keep-Alive使用标准HTTP/1.0版本些同默认情况所HTTP1.1所连接都保持除非请求或响应指明要关闭:Connection: Close Connection: Keep-Alive字段再没意义原另外添加新字段Keep-Alive:字段并没详细描述用做忽略
Not reliable(靠)
HTTP状态协议意味着每请求都独立Keep-Alive没能改变结另外Keep-Alive能保证客户端服务器间连接定跃HTTP1.1版本唯能保证连接关闭能通知所应该让程序依赖于Keep-Alive保持连接特性否则意想
Keep-AlivePOST
HTTP1.1细则规定POST消息体面能任何字符指于某特定浏览器能并遵循标准(比POST消息体面放置CRLF符)据我所知部浏览器POST消息体都自跟CRLF符再发送何解决问题呢根据面说明POST请求禁止使用Keep-Alive或者由服务器自忽略CRLF部服务器都自忽略未经测试前能知道服务器否做
内容自:
HTTP状态协议Connection:Keep-Alive容易犯误区
名词解释:
HTTP状态:状态指协议于事务处理没记忆能力服务器知道客户端状态另面讲打服务器网页前打服务器网页间没任何联系
要实现购物车需要借助于Cookie或Session或服务器端API(NSAPI and ISAPI)记录些信息请求服务器结算页面同些信息提交服务器
登录网站登录状态由Cookie或Session记忆服务器并知道否登录
优点:服务器用每客户端连接配内存记忆量状态用客户端失连接清理内存更高效处理WEB业务
缺点:客户端每请求都需要携带相应参数服务器需要处理些参数
Keep-Alive:参考另外篇文章HTTP Keep-Alive 详解
容易犯误区:
1、HTTP状态面向连接协议状态代表HTTP能保持TCP连接更能代表HTTP使用UDP协议(连接)
2、HTTP/1.1起默认都启Keep-Alive保持连接特性简单说网页打完客户端服务器间用于传输HTTP数据TCP连接关闭客户端再访问服务器网页继续使用条已经建立连接
3、Keep-Alive永久保持连接保持间同服务器软件(Apache)设定间
内容自:
Keep-Alive简介及Tomcat配置
Keep-Alive功能使客户端服务器端连接持续效现服务器继请求Keep-Alive功能避免建立或者重新建立连接市场 部Web服务器包括iPlanet、IISApache都支持HTTP Keep-Alive于提供静态内容网站说功能通用于负担较重网站说存另外问题:虽客户保留打连 接定处同影响性能处理暂停期间本释放资源仍旧占用Web服务器应用服务器同台机器运行Keep-Alive功能资源利用影响尤其突 功能HTTP 1.1预设功能HTTP 1.0加Keep-Alive header提供HTTP持续作用功能
Keep-Alive: timeout=5, max=100
timeout:期间5秒(应httpd.conf参数:KeepAliveTimeout)max百请求强制断掉连接
timeout间内新连接同max自减1直0强制断掉
Tomcat相关设置,server.xml Connector 元素
keepAliveTimeout:
间连接close单位milliseconds
maxKeepAliveRequests:
连接数(1表示禁用-1表示限制数默认100般设置100~200间).
maxKeepAliveRequests=1″避免tomcat产量TIME_WAIT连接定程度避免tomcat假死
Connector executor=tomcatThreadPool
port=80″ protocol=HTTP/1.1″
connectionTimeout=60000″
keepAliveTimeout=15000″
maxKeepAliveRequests=1″
redirectPort=443″
maxHttpHeaderSize=8192″ URIEncoding=UTF-8″ enableLookups=false acceptCount=100″ disableUploadTimeout=true/?网站服务器运行段间down掉原能造种现象:比tomcat堆非堆内存设置足程序没能释放内存空间造内存溢或者某些进程直运行没能释放造cup资源量消耗除程序本身原能客服端访问造(客户端包含蜘蛛软件等搜索引擎)服务器客户端建立链接(用netstat -a命令查看网络访问信息)需要http响应connection做定设置
http1.1requestreponse header都能现connection字段header含义clientserver通信于链接何进行处理http1.1clientserver都默认支持链接 client使用http1.1协议希望使用链接则需要header指明connection值close;server想支持链接则response需要明确说明connection值close
论requestresponseheader包含值closeconnection都表明前使用tcp链接请求处理完毕断掉client再进行新请求必须创建新tcp链接
HTTP Connectionclose设置允许客户端或服务器任何关闭底层连接双都要求处理请求关闭TCP连接
何程序设置:滤器加入:response.setHeader(connection, close);
内容自: HTTP Keep-Alive详解
HTTP Keep Alive
HTTP Keep-Alive 程序误解面介绍HTTP/1.0HTTP/1.1版本何工作及其JAVA运行原理
HTTP请求响应模式典型范例即客户端向服务器发送请求信息服务器响应信息HTTP版本每请求都创建新客户端-服务器连接连接发送请求接收请求模式优点简单容易理解编程实现;缺点效率低Keep-Alive提用解决效率低问题
HTTP/1.0
HTTP/1.0版本并没官标准规定Keep-Alive何工作实际附加HTTP/1.0协议客户端浏览器支持Keep-AliveHTTP请求添加字段 Connection: Keep-Alive服务器收附带Connection: Keep-Alive请求响应添加同字段使用Keep-Alive客户端服务器间HTTP连接保持断(超Keep-Alive规定间意外断电等情况除外)客户端发送另外请求使用条已经建立连接
HTTP/1.1
HTTP/1.1版本官规定Keep-Alive使用标准HTTP/1.0版本些同默认情况所HTTP1.1所连接都保持除非请求或响应指明要关闭:Connection: Close Connection: Keep-Alive字段再没意义原另外添加新字段Keep-Alive:字段并没详细描述用做忽略
Not reliable(靠)
HTTP状态协议意味着每请求都独立Keep-Alive没能改变结另外Keep-Alive能保证客户端服务器间连接定跃HTTP1.1版本唯能保证连接关闭能通知所应该让程序依赖于Keep-Alive保持连接特性否则意想
Keep-AlivePOST
HTTP1.1细则规定POST消息体面能任何字符指于某特定浏览器能并遵循标准(比POST消息体面放置CRLF符)据我所知部浏览器POST消息体都自跟CRLF符再发送何解决问题呢根据面说明POST请求禁止使用Keep-Alive或者由服务器自忽略CRLF部服务器都自忽略未经测试前能知道服务器否做
内容自:
HTTP状态协议Connection:Keep-Alive容易犯误区
名词解释:
HTTP状态:状态指协议于事务处理没记忆能力服务器知道客户端状态另面讲打服务器网页前打服务器网页间没任何联系
要实现购物车需要借助于Cookie或Session或服务器端API(NSAPI and ISAPI)记录些信息请求服务器结算页面同些信息提交服务器
登录网站登录状态由Cookie或Session记忆服务器并知道否登录
优点:服务器用每客户端连接配内存记忆量状态用客户端失连接清理内存更高效处理WEB业务
缺点:客户端每请求都需要携带相应参数服务器需要处理些参数
Keep-Alive:参考另外篇文章HTTP Keep-Alive 详解
容易犯误区:
1、HTTP状态面向连接协议状态代表HTTP能保持TCP连接更能代表HTTP使用UDP协议(连接)
2、HTTP/1.1起默认都启Keep-Alive保持连接特性简单说网页打完客户端服务器间用于传输HTTP数据TCP连接关闭客户端再访问服务器网页继续使用条已经建立连接
3、Keep-Alive永久保持连接保持间同服务器软件(Apache)设定间
内容自:
Keep-Alive简介及Tomcat配置
Keep-Alive功能使客户端服务器端连接持续效现服务器继请求Keep-Alive功能避免建立或者重新建立连接市场 部Web服务器包括iPlanet、IISApache都支持HTTP Keep-Alive于提供静态内容网站说功能通用于负担较重网站说存另外问题:虽客户保留打连 接定处同影响性能处理暂停期间本释放资源仍旧占用Web服务器应用服务器同台机器运行Keep-Alive功能资源利用影响尤其突 功能HTTP 1.1预设功能HTTP 1.0加Keep-Alive header提供HTTP持续作用功能
Keep-Alive: timeout=5, max=100
timeout:期间5秒(应httpd.conf参数:KeepAliveTimeout)max百请求强制断掉连接
timeout间内新连接同max自减1直0强制断掉
Tomcat相关设置,server.xml Connector 元素
keepAliveTimeout:
间连接close单位milliseconds
maxKeepAliveRequests:
连接数(1表示禁用-1表示限制数默认100般设置100~200间).
maxKeepAliveRequests=1″避免tomcat产量TIME_WAIT连接定程度避免tomcat假死
Connector executor=tomcatThreadPool
port=80″ protocol=HTTP/1.1″
connectionTimeout=60000″
keepAliveTimeout=15000″
maxKeepAliveRequests=1″
redirectPort=443″
maxHttpHeaderSize=8192″ URIEncoding=UTF-8″ enableLookups=false acceptCount=100″ disableUploadTimeout=true/
dos命令行 差不多。一般是电脑联机路由 然后可以开代理 MS wINDOWS 自已就有这个功能
具体是:
ADSL代理服务器的设置方法
1、在桌面上用鼠标右键单击‘Internet Explorer’图标,并选择‘属性’。
2、单击‘连接’标签。
3、选中使用的连接,如:‘我的连接’,单击‘设置’按钮。
4、单击‘鼠标左键’,选择‘使用代理服务器’的选项,单击‘确定’按钮。
5、单击‘确定’按钮。
LAN局域网用户代理服务器设置方法
1、在桌面上用鼠标右键单击‘Internet Explorer图标’,并选择‘属性’。
2、单击‘连接’标签。
3、单击‘局域网设置’按钮。
4、单击‘鼠标左键’,去掉‘使用代理服务器’的选项,单击‘确定’按钮。
5、单击‘确定’按钮。
Modem拨号代理服务器设置方法
Internet Exploer 4.01
IE4.01:菜单栏“查看”-下拉菜单“Internet选项”-选项卡“连接”-在“代理服务器”一栏选中“通过代理服务器访问Internet”,输入代理服务器地址和端口号。-确定
Internet Exploer 5.0以上版本
IE 5.0:菜单栏“工具”-下拉菜单“Internet选项”-选项卡“连接”-在“拨号设置”中选中您目前使用的连接,然后点击右侧的“设置”-在中间的“代理服务器”栏选中“使用代理服务器”-在“地址”和“端口”栏输入代理服务器-确定-确定。
微软IE设置代理
(一)菜单选择“工具”,选“Internet选项(O)”。
(二)选“连接”,单击“设置(S)...”
(三)在“代理服务器”组,把“对此连接使用代理服务器”打钩,然后填上HTTP的地址和端口。
(四)如果有更齐全的代理数据,如SOCK及FTP等,可单击“高级(C)...”,分别填入对应的代理数据。(这项一般不填)
(五)单击“确定”就可以了。
腾讯TT设置代理
(一)主菜单选择“工具”,选“WWW代理”,选“代理设置...”
(二)点击“新增”,然后在“地址”那填上代理的IP以及端口,单击“确定”,代理就可以生效。
(三)当使用代理的时候,菜单上代理名称前面有“钩”,当向要取消代理或者再次使用代理,点击菜单就行,很方便。
QQ设置代理
● QQ设置SOCK5代理
(一)打开参数设置。
点击QQ的“QQ2000”,选择“系统菜单”。
(二)输入代理参数。
选择“网络参数”,在腾讯的服务器地址填上绝对IP(“***.***.***.***形式的”),下面有腾讯服务器域名转换绝对IP的表,随便选择一个就行。“使用SOCK5代理服务器”打钩,填上代理服务器的地址和端口参数。把用户名和密码输入框清空(假如是使用有密码的代理,则填上代理的用户名和密码)。
sz.tencent.com = 61.144.238.145
sz2.tencent.com = 61.144.238.146
sz3.tencent.com = 202.104.129.251
sz4.tencent.com = 202.104.129.254
sz5.tencent.com = 61.141.194.203
sz6.tencent.com = 202.104.129.252
sz7.tencent.com = 202.104.129.253
(三)测试代理参数。
点击测试。假如出现“代理服务器正常”,则这个代理是可用的。假如出现“无法连接代理服务器”,则说明这个代理不能使用,重新输入另外的代理参数,重新测试。
(四)使代理生效。
要使刚刚输入的参数生效,必须下线一次,再上线,这样才能改变QQ的传输状态,使代理生效。如果不能上线,请多换几个代理试试。
● QQ设置HTTP代理
(一)打开参数设置。
点击QQ的“QQ2000”,选择“系统菜单”。
(二)设置代理参数
选择“会员功能”,把“使用HTTP协议登陆”打钩,选择“通过HTTP代理”,填入HTTP代理的IP以及端口参数,清空用户名称和密码。
(三)测试代理参数。
按“测试”,测试该HTTP代理能不能用,出现“测试成功,请返回”,则该代理能用。否则表示该代理不能用,换别的代理。
(四)使代理生效。
要使刚刚输入的参数生效,必须下线一次,再上线,这样才能改变QQ的传输状态,使代理生效。如果不能上线,请多换几个代理试试。
ICQ设置代理
使用的是ICQ2000中文版。ICQ能使用的代理比较多,可以用HTTP、SOCK4、SOCK5等。在ICQ中,代理也称作防火墙。
(一)打开参数设置。
点击“主菜单”,选择“参数选择”。
(二)输入代理参数。
选“连接”,在“代理设置”,选择“使用防火墙”和“使用代理服务器”,在“代理服务器”选择代理的类型,可以是SOCK4、SOCK5、HTTP等,但一定要和你准备的代理的类型是一 致的。
在“防火墙”组,选择代理的类型,和输入代理的IP及端口的参数
(四)使代理生效。
跟QQ一样,要使得代理生效,必须先下线再上线,假如不能上线就是代理不行,换一个代理重新设置。
UC设置代理
(一)打开参数设置。
点击“UC”,选择“系统参数”。
(二)输入代理参数。
选择“网络”,选“局域网”,“使用SOCK5代理”打钩,填上代理IP和端口的参数,清空用户名和密码。(假如是使用有密码的代理,则填上代理的用户名和密码)。
(三)测试代理参数。
点击测试。假如出现“代理服务器正常”,则这个代理是可用的。假如出现“无法连接代理服务器”,则说明这个代理不能使用,重新输入另外的代理参数,重新测试 。
(四)使代理生效。
要使刚刚输入的参数生效,必须下线一次,再上线,这样才能改变UC的传输状态,使代理生效。如果不能上线,请多换几个代理试试。
MSN设置代理
(一)打开参数设置。
点击“MSN”,选择“选项(O)...”。
(二)输入代理参数。
“我使用的代理服务器”打钩,选“SOCK5”,填上代理IP和端口的参数,清空用户名和密码。(假如是使用有密码的代理,则填上代理的用户名和密码)。 当然还可以选择HTTP或SOCK4代理,填上相应的参数就行。
(四)使代理生效。
按“确定”就行了。
2003版QQ设置代理
2003版QQ,普通用户除了可以使用SOCK5代理之外,还可以使用HTTP代理,会员用户可以使用VIP的HTTP代理。
(一)打开参数设置
点击QQ的“QQ2003”,选择“系统菜单”。
(二)设置代理参数
选择“网络设置”。上网类型要设置为“局域网”。如果使用SOCK5代理的就把“SOCK5代理设置”打钩,填入代理服务器的IP和端口的参数。假如使用HTTP代理的就选“HTTP代理设置”,填入参数 。用户名称和密码一般留空,不用填。
(三)测试代理参数。
按“测试”,试试该代理能否成功连接。假如出现“不能连接代理服务器”的就换别的代理试试。
(四)使代理生效。
要使刚刚输入的参数生效,必须下线一次,再上线,这样才能改变QQ的传输状态,使代理生效。如果不能上线,请多换几个代理试试。
(望楼主采纳哦)