如何在没有传输编码的情况下发送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会在不知道响应内容长度和/或使用持久连接时使用分块响应。 要避免分块,您需要设置响应内容长度或通过在响应上设置“连接”:“关闭”标头来避免持久连接。
容器将根据要使用Writer
或outputStream
写入的数据大小决定使用Content-Length或Transfer-Encoding。 如果数据的大小大于HttpServletResponse.getBufferSize()
,则响应将被中继。 如果不是,将使用Content-Length
。
在您的情况下,只需删除第二个刷新代码将解决您的问题。