我写了一个servlet来提供mp4文件。
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.reset();
resp.setContentType("video/mp4");
Path f = Paths.get(getServletContext().getRealPath("/WEB-INF/small.mp4"));
int length = (int) Files.size(f);
byte[] bytes = Files.readAllBytes(f);
resp.setStatus(200);
resp.setContentLength(length);
ServletOutputStream sos = resp.getOutputStream();
sos.write(bytes);
resp.flushBuffer();
sos.flush();
sos.close();
}
mp4文件为1057148字节。 我使用Charles捕获了http消息,发现实际的主体大小小于我写的字节数。更奇怪的是实际的实体字节随着不同的请求而改变。
我不知道为什么tomcat会截断我的输出或者我错过了什么。
我的tomcat是Mac OSX 10.11.2上的apache-tomcat-8.0.27
现在我关闭了这个问题。我找到了原因。 Tomcat没有截断我的回复。这是查尔斯的问题。它显示:客户端在收到整个响应之前关闭了连接。
所以查尔斯似乎有一些错误。我使用Fiddler并发现响应保持了正常的预期。