如何在没有传输编码的情况下发送HTTP响应:chunked?

时间:2013-05-13 23:22:14

标签: java servlets jetty chunked-encoding

我有一个响应Twilio API的Java Servlet。似乎Twilio不支持我的回复使用的分块转移。如何避免使用Transfer-Encoding: chunked

这是我的代码:

// response is HttpServletResponse
// xml is a String with XML in it
response.getWriter().write(xml);
response.getWriter().flush();

我使用Jetty作为Servlet容器。

3 个答案:

答案 0 :(得分:7)

我相信Jetty会在不知道响应内容长度和/或使用持久连接时使用分块响应。要避免分块,您需要设置响应内容长度或通过在响应中设置“连接”:“关闭”标题来避免持久连接。

答案 1 :(得分:4)

在写入流之前尝试设置Content-length。不要忘记根据正确的编码计算字节数,例如:

final byte[] content = xml.getBytes("UTF-8");
response.setContentLength(content.length);
response.setContentType("text/xml"); // or "text/xml; charset=UTF-8"
response.setCharacterEncoding("UTF-8");

final OutputStream out = response.getOutputStream();
out.write(content);

答案 2 :(得分:1)

容器将根据要使用WriteroutputStream写入的数据大小决定使用Content-Length或Transfer-Encoding。如果数据大小大于HttpServletResponse.getBufferSize(),则响应将被中继。如果没有,将使用Content-Length

在您的情况下,只需删除第二个冲洗代码即可解决您的问题。