Premature end of Content-Length delimited message body解决方案

【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!

博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!

吾等采石之人,应怀大教堂之心,愿你们奔赴在各自的热爱中…

最近涉及到文件上传相关的代码,看服务器日志显示的是这个Premature end of Content-Length delimited message body

翻译:内容长度分隔的消息正文过早结束

在这里插入图片描述
比如原计划传输100000 B,实际只是传输了88888 B,此时流关闭了。


本地打debug是:显示IO异常 连接关闭

百度了一下相关原因:就是说一个流转文件可能只转了一半,你将流关闭了,这样就导致了IO异常


复现一下我的情况:

第一步:先是通过路径获取文件转换成流 第二步:通过这个流获取这个文件的文字

debug到第二步就爆IO异常

异常原因:我的第一个方法下载的时候转换流,提前关闭了连接,导致第二步流没有全部提取出来成文字爆出异常

解决方案:修改代码逻辑,等到第二步全部执行完成,再执行流的关闭

method A{
    try{
         //第一步:先是通过路径获取文件转换成流
         //第二步:通过这个流获取这个文件的文字
   }catch{
     //捕捉异常
   }finally{
     //关闭流操作
   }

}

总结:遇到这样的异常一定要debug定位到具体的报错位置,看看是不是因为上述流关闭导致的异常,新手先尝试注释一下前面的流的close方法,重新测试,看看报错是否解决,如果解决,调整代码逻辑即可成功解决!

关闭资源 原则:先开后关,后开先关


The best investment is to invest in yourself.

非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤️ 分享👥 留言💬thanks!!!

2020.12.29 23:13 愿你们奔赴在自己的热爱里!

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 这个错误提示意味着在使用 Content-Length 头部指定消息体长度时,消息体的长度与 Content-Length 头部指定的长度不一致,导致消息体提前结束。可能的原因包括网络传输中出现了错误、服务器或客户端代码中的错误等。需要检查代码和网络连接,确保消息体的长度与 Content-Length 头部指定的长度一致。 ### 回答2: "Premature end of content-length delimited message body" 是一个HTTP协议的错误信息,通常意味着在传输过程中出现了不可预知的错误,导致消息体的长度不符合预期。在HTTP协议中,每个消息都需要指定消息头和消息体,消息头中包含了消息的一些元信息,比如消息类型、消息长度等等,而消息体则是存放具体内容的地方。在格式为Content-Length的消息头中,需要指定消息体的长度。这样,接收方就知道了消息体的长度,从而可以正确地接收和处理信息。 当出现“premature end of content-length delimited message body”时,通常是因为发送方发送了不完整的消息,在消息体的长度与消息头中指定的长度不匹配导致。这种错误可能会导致接收方无法正确地处理消息体,甚至可能使得接收方崩溃或出现其他问题。 如果你遇到了此类错误,通常可以考虑以下几个方面进行排查: 1. 检查消息发送方是否正确地按照HTTP协议规范发送了消息。 2. 检查消息体的长度是否正确,是否与消息头中指定的长度一致。 3. 检查网络环境是否存在问题,比如是否发生了网络连接中断等等。 在排查问题时,还需要特别注意一些细节: 1. 在HTTP协议中,如果需要传输二进制数据,通常需要使用Base64或者其他编码方式进行转码。如果在消息中使用了编码方式,需要保证编码方式正确。 2. 在使用curl等HTTP客户端发送消息时,需要特别注意是否启用了正确的选项。有些选项可能会在发送消息时对消息体进行处理,导致消息体长度发生变化,进而触发“premature end of content-length delimited message body”错误。 总之,如果你遇到了“premature end of content-length delimited message body”错误,需要耐心地进行问题排查,并尽可能多地检查可能存在的问题,尽早解决问题,确保消息能够正确传输。 ### 回答3: “premature end of content-length delimited message body”是HTTP协议中的一种错误,它通常表示客户端期望的消息体长度与实际接收到的消息体长度不一致。也就是说,客户端在向服务器发送数据时,需要在HTTP请求头中指定Content-Length字段,以告知服务器需要发送多少字节的数据。而当服务器返回响应时,需要在HTTP响应头中指定Content-Length字段,以告知客户端需要接收多少字节的数据。但是,如果客户端在接收服务器响应时发现实际接收到的数据长度没有达到Content-Length指定的长度,就会出现“premature end of content-length delimited message body”错误。 这种错误的产生通常有以下几种原因: 1. 服务器发送的消息体长度不正确,可能是由于服务器端程序逻辑错误或者网络传输问题导致的。这种情况下,客户端需要检查请求头中Content-Length字段和响应头中Content-Length字段是否一致,并且尝试重新发送请求或者等待一定时间后再次发送请求。 2. 客户端接收数据缓慢或者发生了中断,导致接收到的数据长度不足。这种情况下,客户端需要检查网络连接情况、操作系统和应用程序的网络设置,以确保能够正常接收数据。 3. HTTP协议版本不兼容,比如客户端和服务器端使用不同版本的HTTP协议,或者使用的代理服务器不支持HTTP协议的版本。这种情况下,客户端需要升级HTTP协议的版本,或者更换代理服务器。 总之,“premature end of content-length delimited message body”错误是一种常见的HTTP协议错误,通常是由各种因素综合造成的。解决这种错误需要系统地排查各种可能的原因,并且根据具体情况采取相应的措施。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员橙子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值