java servlet是否有可能提取响应头的请求头的全文而不是单独执行getHeader()方法?或者,是否可以获得这些标题的完整大小字节数?
原因我问这是因为我想跟踪servlet和发送请求的设备之间的数据使用情况,并且由于将要从不同设备发送大量请求,我希望能够获得精确表示只有标题使用了多少字节。
提前致谢。
答案 0 :(得分:1)
API没有提供通过一次调用获取所有标头的方法 - 检查Javadocs:
http://download.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html
以下是如何获取所有标头的示例(无需繁琐的空检查)。
private MultiValueMap getAllHeaders(HttpServletRequest request) {
MultiValueMap allHeaders = new MultiValueMap();
List<String> headerNames = Collections.list((Enumeration<String>)request.getHeaderNames());
for (String headerName : headerNames) {
allHeaders.putAll(headerName, Collections.list((Enumeration<String>) request.getHeaders(headerName)));
}
return allHeaders;
}
使用Java Servlet模型后,如果不重新构造它就无法获得字节大小(即:迭代getAllHeaders并附加<header name>: <header value>
),您还需要添加样板GET HTTP 1/1.1
如果你绝对需要一个Java解决方案,那肯定是可行的,但我觉得你应该考虑将这个逻辑推出你的java应用程序并进入代理。
答案 1 :(得分:0)
我认为你不能这样做。或者至少,不是没有攻击servlet容器实现。
也许您应该在HTTP客户端和服务器之间放置代理并在那里进行测量。
或者,通过在请求和响应中集成标头/字段的大小来获得近似值。我以为这会让你在几个百分之内......大多数人都会说这已经足够了。