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时,都带上这个参数。

posted @ 2022-04-09 15:07  钟小嘿  阅读(1234)  评论(0编辑  收藏  举报