微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript-getResponse标头的内容长度返回null

一个发送请求&的ajax js函数.得到响应,它通常会成功,但是当我使用firbug进行检查时,我闻起来有点凌乱.请看一下.
请求成功时:ajaxRequest.getResponseHeader(‘content-Length’);返回null
但实际上,内容长度以数字为单位.以下是Firbug控制台的输出

HeadersResponseXML

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

请求失败时:返回0(零),这是正确的.
    标头
    服务器Apache-土狼/1.1
    内容长度0
    2011年9月15日星期四,格林尼治标准时间

当成功时,我在响应头中看不到任何content-length的原因吗?请比较成功与否;失败的Firebug控制台输出.如何获得实际的内容长度.

解决方法:

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

Where possible, set the Content-Length header (with the ServletResponse.setContentLength(int) method), to allow the servlet container to use a persistent connection to return its response to the client, improving performance. The content length is automatically set if the entire response fits inside the response buffer.

When using HTTP 1.1 chunked encoding (which means that the response has a transfer-encoding header), do not set the Content-Length header.

换句话说,如果您未在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());

您只需要记住,只要响应主体过大,这都可能成为潜在的记忆.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐