Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以检索完整的标题或标题大小?_Java_Http_Header_Request_Response - Fatal编程技术网

Java 是否可以检索完整的标题或标题大小?

Java 是否可以检索完整的标题或标题大小?,java,http,header,request,response,Java,Http,Header,Request,Response,java servlet是否可以提取响应头的请求头的全文,而不是单独执行getHeader()方法?或者,是否可以获取这些标头的完整大小(以字节为单位) 我问这个问题的原因是因为我想跟踪servlet和发送请求的设备之间的数据使用情况,并且由于将从不同的设备发送大量请求,我希望能够准确地表示仅头使用了多少字节 提前谢谢 我认为你做不到。或者至少,如果没有对servlet容器实现进行黑客攻击 也许您应该在HTTP客户机和服务器之间放置一个代理,并在那里进行测量 或者,通过整合请求和响应中的头/字段

java servlet是否可以提取响应头的请求头的全文,而不是单独执行getHeader()方法?或者,是否可以获取这些标头的完整大小(以字节为单位)

我问这个问题的原因是因为我想跟踪servlet和发送请求的设备之间的数据使用情况,并且由于将从不同的设备发送大量请求,我希望能够准确地表示仅头使用了多少字节


提前谢谢

我认为你做不到。或者至少,如果没有对servlet容器实现进行黑客攻击

也许您应该在HTTP客户机和服务器之间放置一个代理,并在那里进行测量


或者,通过整合请求和响应中的头/字段的大小来获得近似值。我本以为这会让你在百分之几之内。。。大多数人会说这已经足够好了。

我认为你做不到。或者至少,如果没有对servlet容器实现进行黑客攻击

也许您应该在HTTP客户机和服务器之间放置一个代理,并在那里进行测量


或者,通过整合请求和响应中的头/字段的大小来获得近似值。我本以为这会让你在百分之几之内。。。大多数人会说这已经足够好了。

API没有提供一种通过单个调用获取所有头的方法-请查看Javadocs:

下面是一个示例,说明如何获取所有标题(无需繁琐的空检查)

私有多值映射getAllHeaders(HttpServletRequest){ MultiValueMap allHeaders=新的MultiValueMap(); List headerNames=Collections.List((枚举)request.getHeaderNames()); 用于(字符串头名称:头名称){ allHeaders.putAll(headerName,Collections.list((枚举)request.getHeaders(headerName)); } 返回所有标题; }
使用Java Servlet模型后,如果不重新构造它(即:迭代getAllHeaders并追加
),就无法获得以字节为单位的头大小,您还需要添加boiler plate
get HTTP 1/1.1
等。如果您绝对需要Java解决方案,这是绝对可行的,但我觉得您应该考虑将此逻辑从java应用程序中推出并放入代理中。

API没有提供一种通过单个调用获取所有头的方法-请查看Javadocs:

下面是一个示例,说明如何获取所有标题(无需繁琐的空检查)

私有多值映射getAllHeaders(HttpServletRequest){ MultiValueMap allHeaders=新的MultiValueMap(); List headerNames=Collections.List((枚举)request.getHeaderNames()); 用于(字符串头名称:头名称){ allHeaders.putAll(headerName,Collections.list((枚举)request.getHeaders(headerName)); } 返回所有标题; } 使用Java Servlet模型后,如果不重新构造它(即:迭代getAllHeaders并追加
),就无法获得以字节为单位的头大小,您还需要添加boiler plate
get HTTP 1/1.1
等。如果您绝对需要Java解决方案,这是绝对可行的,但是我觉得你应该考虑把这个逻辑从你的java应用程序中推出,放到一个代理中

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;
}