5

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

4

3 回答 3

7

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

于 2013-05-13T23:52:23.573 回答
6

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

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);
于 2013-05-13T23:56:13.053 回答
1

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

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

于 2013-09-09T08:07:31.097 回答