请求后台 Unexpected EOF read on the socket

APP请求后端接口,莫名奇妙报错,前往后台查看日志还行报了下面的错误

02-03 23:52:37.853 ERROR [o.a.c.c.C.[.[localhost].[/].[dispatcherServlet]] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: java.io.EOFException: Unexpected EOF read on the socket] with root cause
java.io.EOFException: Unexpected EOF read on the socket
        at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:788)
        at org.apache.coyote.http11.Http11InputBuffer.access$300(Http11InputBuffer.java:42)
        at org.apache.coyote.http11.Http11InputBuffer$SocketInputBuffer.doRead(Http11InputBuffer.java:1133)
        at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:102)
        at org.apache.coyote.http11.Http11InputBuffer.doRead(Http11InputBuffer.java:249)
        at org.apache.coyote.Request.doRead(Request.java:551)
        at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:336)
        at org.apache.catalina.connector.InputBuffer.checkByteBufferEof(InputBuffer.java:632)
        at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:362)
        at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:132)
        at java.io.FilterInputStream.read(FilterInputStream.java:133)
        at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:132)
        at org.apache.tomcat.util.http.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:977)
        at org.apache.tomcat.util.http.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:881)
        at java.io.InputStream.read(InputStream.java:101)
        at org.apache.tomcat.util.http.fileupload.util.Streams.copy(Streams.java:98)
        at org.apache.tomcat.util.http.fileupload.util.Streams.copy(Streams.java:68)
        at org.apache.tomcat.util.http.fileupload.MultipartStream.readBodyData(MultipartStream.java:572)

将请求拿出来,参数什么的一样,使用postMan提交正常,采用APP访问接口就失败。

后面怀疑是不是请求头不一样,请求头也一致后发现postMan提交也失败了。

不带请求头使用postMan提交发现, Content-Length:659  用Fiddler拦截看到的, 对比APP提交拦截的Content-Length不一致 ,  在postMan中不指定Content-Length ,

会在提交的时候自己计算。 后面我手动设置 Content-Length:660  > 659, 发现请求就和APP请求一样报错了。

 

APP请求拦截的请求头Content-Length: 777

postMan请求不主动带Content-Length的话默认是在请求发生的时候计算出来的

手动指定Content-Length: 660  postMan请求一样报错了

 

 

总结: Content-Length 是表示请求的字节长度 , 服务的根据这个头去读取流,当读取到659的时候流已经到EOF结束了,但是APP设置的是777长度,服务端就认为请求流应该还没读取完,所以就报错了。

这个需要APP同事排查下为什么是 777 长度,这个长度不对

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值