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

我有一个响应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容器。

尝试在写入流之前设置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); 

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

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

在您的情况下,只需删除第二个刷新代码将解决您的问题。