我从servlet(实际上是Spring Boot控制器,但这不重要)流式响应未知大小的客户端。
我通过调用flush()
强制发送报头,以便客户端(浏览器)可以正确显示下载已经开始。
如果在流中间发生错误,我该怎么办?现在客户端只是得到文件的一部分,不知道它是坏的。
根据流式传输Http请求体时如何处理错误,我应该在套接字上的TCP RST或写一些不是有效分块编码数据的垃圾。
不幸的是,我没有找到访问底层套接字的方法,也不能编写格式错误的响应-ServletResponse#getOutputStream
在内部进行分块,我也找不到绕过它的方法。
在https://github.com/apache/tomcat/commit/fa0f2567aae91a13137094ebcdb74d72b8222f3b
中修复了此问题从Tomcat到10.1.0都可以使用。