HttpClient4 客户端出现TIME_WAIT

一、一般代码编写方式:

CloseableHttpClient httpclient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(url);
try {
        CloseableHttpResponse response = httpclient.execute(httpPost);
        HttpEntity httpEntity = response.getEntity();
        return EntityUtils.toString(httpEntity, charset);
 } catch (Exception e) {
        logger.error("message code : " + e.getMessage(), e);
 } finally {
        httpPost.releaseConnection();
 }

二、现象

如果分开机子,一台机子跑服务器,一台机子跑客户端,客户端使用HttpClient4来进行请求。

会发现TIME_WAIT(连接哪端主动关闭,TIME_WAIT将出现在哪端,并且等待2MSL时间才会回收,大约一分钟)均在客户端。


但是按照我们以前学校的知识点,http请求结束后,应该是由服务器关闭才是。


三、原因

其实这是自己知识点不足导致的,

HttpClient4发送的其实是http1.1的,而我上边的服务器自动关闭的知识点是http1.0的,

http1.0 默认短连接,服务器主动关闭, 需要长连接需要配置keepalive

http1.1 默认长连接,因此服务器不会主动关闭,而httpclient4我们一般会直接写httpPost.releaseConnection(),因此自然是我们客户端主动关闭了

通过nc -l port, 也可以知道httpclient4默认发送的http1.1协议的

因此,如果还是希望服务器短连接并且主动关闭,可以配置Connection:close在http header

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值