java.net.SocketException: Connection reset by peer: socket write error
最近在项目中使用Httpclient对接外部接口时,内网使用Squid做正向代理,用POST请求在上传大于30kb的数据时,httpClient返回的信息总是xx.xx.xx.xx:80 failed to respond,查询代理日志发现报407没权限的错误。取消代理认证后再次请求,发现又抛出如图异常:
但在本地开发上传都是正常的,但在dev环境却出现这种问题。
于是经过不懈的查阅资料,发现http协议中header有一个参数:Expect:100-continue
。
Expect是一个请求消息头,包含一个期望提条件,只有在服务器满足期望条件时才能友好的处理请求,若不满足条件,则会返回用户自定义的错误状态码。但其在规范中只定义了一个期望条件,即Expect:100-continue。
尝试在请求头header中添加这个请求头信息,问题得以解决。究其原因,可能是对于content-length的值过大,服务器便会拒绝,故需要加请求头声明期望条件,让服务器代理上传的请求。
建议在使用httpClient时,都带上这个参数。
就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !