【问题标题】:Bad request when sending a long HTTP post request with Jersey使用 Jersey 发送长 HTTP 发布请求时出现错误请求
【发布时间】:2012-07-25 15:19:48
【问题描述】:

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

【问题讨论】:

  • Curl 调用顺利通过,因为您可能没有在 curl 请求中包含所有 HTTP 标头。如果你这样做了,你很可能也会收到 400 响应。

标签: java http tomcat jersey tomcat7


【解决方案1】:

还将 Jersey 命令更改为:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多