springboot请求阻塞问题
文章目录
【注意】最后更新于 September 26, 2023,文中内容可能已过时,请谨慎使用。
结论:
Content-Length 如果设置了,必须是正确的。如果不设置,浏览器或者其他客户端工具,会自动添加
如果header中存在Transfer-Encoding: chunked,Content-Length将被忽略。
Transfer-Encoding:chunked主要应用在大数据量或动态数据传输上,主要用户服务端响应
今天遇到一个请求一直阻塞,然后提示500,原来以为代码有什么问题,但是在 DispatcherServlet
打了断点,请求一直没有进入,后来发现是Content-Length的值过长导致tomcat层面一直在等待
原理解析
Content-Length头既可以用于客户端发起的请求(request),也可以用于服务器端返回的响应(response)
用于request时,Content-Length表示request body的大小。request body可以简单理解为request header以外的数据,比如表单数据、上传的文件数据。
用于response时,Content-Length表示response body的大小。response body可以简单理解为responset header以外的数据,比如html文本、下载的文件数据。
如果Content-Length比实际长,则服务器会超时,如果比实际短则服务器会截断请求
参考文章
天天见之HTTP Header Content-Length 和 Transfer-Encoding,你真的了解吗? - 知乎
content-length获取的大小与实际文件大小不一致的原因_contentlength和body大小不一致-CSDN博客
文章作者 lialzm
上次更新 2023-09-26