我正在使用Jersey发送HTTP POST请求,如下所示:
MultivaluedMap<String, String> form = new MultivaluedMapImpl();
form.add("body", "Here there is my text");
ClientResponse response = resource.queryParams(form).type(MediaType.APPLICATION_FORM_URLENCODED).post(ClientResponse.class);
当我输入body元素时,其长度 7999 或更少的文本 - 来自另一方的响应是正常的
但是,如果我尝试的文字长度超过 8000 ,则来自对方的回复是:
返回400 Bad Request
的响应状态
我尝试在命令行中从CURL提交相同的调用,并且传递正常。
响应状态为400
可能是Jersey / Tomcat配置中的东西吗?
我尝试添加到tomcat连接器maxHttpHeaderSize="65536"
,但它没有帮助
答案 0 :(得分:2)
将Jersey命令更改为:
ClientResponse response = resource.type("application/x-www-form-urlencoded").post(ClientResponse.class, form);
而不是您使用查询参数发送它的方式。
答案 1 :(得分:0)
Jersey在请求标头中发送数据,因此一旦标头大小超过其发送400 Bad请求
您可以编辑tomcat / conf / server.xml的HTTP / 1.1连接器条目,并添加maxHttpHeaderSize =“65536”以将默认最大值8K左右增加到64K。我想你可以根据需要提高这个数字,但64K足以满足我现在的需要及其工作。
连接器端口=“8080”maxHttpHeaderSize =“65536”protocol =“HTTP / 1.1”......