如何获取HttpServletRequest/response的大小

3

我应该如何使用Java获取HttpServletRequest和response的大小?

我尝试过以下方法,但不确定这是否是获取请求和响应大小的正确方法:

public void handleRequest(HttpServletRequest request,
        HttpServletResponse response){
 Strig str_request = request.getInputStream().toString();
    char[] char_array_request = str_request.toCharArray();
    int requestSize = char_array_request.length;
}

谢谢你的提前帮助。


你有检查 request.getHeader("Content-Length") 中的 "Content-Length" 头吗? - Edwin Dalorzo
"Content-Length" 只给出正文的大小,我是正确的吗?我想获取包括头部在内的请求大小。 - eagerToLearn
我想你可以计算请求输入流中的所有字节,但是那样你就需要读取其中的所有字节。我认为除此之外别无他法。 - Edwin Dalorzo
2个回答

1
如果您可以访问响应头,您就可以读取Content-Length。
(Status-Line):HTTP/1.1 200 OK
Connection:Keep-Alive
Date:Fri, 10 Mar 2015 14:00:00 GMT
Content-Length:728

上面是一个样例。 请阅读更多

我想获取请求的大小,包括头部。我认为 'Content-Length' 只给出了正文的大小? - eagerToLearn
1
此外,Content-Length头并不总是存在。例如,请考虑“分块编码”... - Steve C
1
没有 (HttpServletResponse) response.getHeader("Content-Length"); 或 response.getContentLength(),那么我该如何获取响应的 Content-Length 呢? - eagerToLearn
在评论之前,我会要求您先阅读API...https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html - Aninda Bhattacharyya
1
感谢您的评论。自Servlet 3.0以来,HttpServletResponse的getHeaders(...)方法得到了支持。而我正在使用2.5版本。 - eagerToLearn

1

使用标准的Java EE API无法测量HTTP请求和响应消息的总长度。您可以:

  • 在应用程序服务器前面放置某种代理来测量消息大小;
  • 如果您正在使用其中一个开源服务器,则可以修改它以某种方式向您提供信息。

这两种策略都不是简单的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接