有一个ajax js函数发送请求并获取响应,它通常会成功,但是当我使用firbug进行检查时,我闻起来有些杂乱。请看一下。
请求成功时的: ajaxRequest.getResponseHeader('content-Length'); returns null但是实际上content-length是数字。以下是Firbug控制台的输出

HeadersResponseXML

Server  Apache-Coyote/1.1
Content-Type    text/xml
Transfer-Encoding   chunked
Date    Thu, 15 Sep 2011 07:23:36 GMT

当请求失败时:返回0(零),它是正确的。
Headers
Server Apache-Coyote/1.1
Content-Length 0
Date Thu, 15 Sep 2011 07:23:53 GMT

成功后,我在响应 header 中看不到任何content-length的原因吗?请比较成功和失败的Firebug控制台输出。如何获得实际的内容长度。

最佳答案

读取doGet()doPost()(或HttpServlet)方法的the javadoc:

换句话说,如果您自己未在servlet中设置内容长度自己并且响应主体大于默认响应缓冲区大小(通常为2KB,可在服务器设置中配置),则Servlet将使用分块编码发送它(从技术上讲,如果在必须设置内容长度之前必须在内存中完全缓冲较大的响应,则可以防止出现内存问题。
如果出于某种原因确实需要响应头中的内容长度,则需要在编写之前自己缓冲整个响应主体。例如。

StringBuilder builder = new StringBuilder();
builder.append(someXml);
// ...

response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");
response.setContentLength(builder.length());
response.getWriter().write(builder.toString());
您只需要记住,只要响应主体过大,这都可能成为潜在的记忆。

09-16 09:25