0

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

4

2 回答 2

2

还将 Jersey 命令更改为:

ClientResponse response = resource.type("application/x-www-form-urlencoded").post(ClientResponse.class, form);

而不是您使用查询参数发送它的方式。

于 2012-07-26T19:54:08.707 回答
0

Jersey 在请求标头中发送数据,因此一旦标头大小超过然后它发送 400 Bad request

您可以编辑 tomcat/conf/server.xml 的 HTTP/1.1 连接器条目,并添加一个 maxHttpHeaderSize="65536" 以从默认最大值 8K 左右增加到 64K。我想您可以根据需要将这个数字提高到最高,但 64K 足以满足我目前的需求及其工作。

连接器端口="8080" maxHttpHeaderSize="65536" 协议="HTTP/1.1" ...

于 2013-11-29T09:58:16.463 回答