使用Jersey发送长HTTP发布请求时出现错误请求

时间:2012-07-25 15:19:48

标签: java http tomcat jersey tomcat7

我正在使用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",但它没有帮助

2 个答案:

答案 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”......

相关问题