HTTP/1.1 413 FULL head

来源:互联网 发布:g502 知乎 编辑:程序博客网 时间:2024/06/07 08:00

昨天,server调用新浪的OpenAPI功能失效。出现的现象是:服务器上线时是可以正常使用的。但是隔一段时间就变得不可用。刚开始以为是socket连接过多或者socket等资源没有释放。后来查了一下socket连接发现不是这样子的. 下面是连接新浪服务器的tcp。发现只有两个。

$ netstat -np | grep 123.125.29tcp        0      0 -- ::ffff:123.125.29.244:443   ESTABLISHED -                   tcp        0      0 -- ::ffff:123.125.29.244:443   ESTABLISHED -                   $ netstat -np | grep 180.149.135tcp       28      0 -- ::ffff:180.149.135.176:443  CLOSE_WAIT  -                   tcp       28      0 -- ::ffff:180.149.135.176:443  CLOSE_WAIT  -     

后来还看了HttpClient的源码和PoolingClientConnectionManager, 发现并不是这个引起的。另外给大家说个事情。使用HttpClient+PoolingClientConnectionManager,然后再使用HttpGet和HttpPost的话,HttpGet和HttpPost是不需要release的.另外socket也不需要显示的关掉。唯一需要注意的是 HttpResponse需要把Entity中的Stream流关掉。否则请求有可能被Hold住。详细的介绍见 HttpClient 卡死 response 为null .
如果你不是使用HttpClient+PoolingClientConnectionManager, 而是每次new出来的新HttpClient, 那就需要关闭Socket,详细解决方法见  JAVA的HttpClient问题:The server failed to respond with a valid HTTP response 。


但是上面都没有解决问题, 最后还是将HTTP的status code打印出来。发现是:

HTTP/1.1 413 FULL head

这问题出在,有多个线程在往HTTP 请求中增加Header, 而且header一直没有清空。就导致了这个问题。

0 0
原创粉丝点击