Tomcat 中的最大 URL 长度是多少?

Mic*_*ach 45 http tomcat uri rfc

它是可配置的吗?我是否可以设置 Tomcat,以便具有 200K 查询参数的 URL 成功通过包含的 servlet?

是的,我知道当你有大量数据时应该使用 POST;在这种特殊情况下,这是一个不太愉快的选择。包含的应用程序(搜索引擎)需要 GET 请求来执行搜索。

Mic*_*ach 66

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

<Connector port="8080" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... />
Run Code Online (Sandbox Code Playgroud)

  • 非常有用,用 Solr 解决了我的问题。似乎我们在“server.xml”配置中修改了默认的 8192 限制,而没有注意到,突然就达到了。痛苦的问题:没有任何记录,连接被悄悄断开(我不记得 HTTP 状态了)。我之前在 http://tomcat.apache.org/tomcat-5.5-doc/config/http.html 上偶然发现了文档,但是我没有将 `maxHttpHeaderSize` 的名称或它的描述与GET 请求查询参数本身也是如此。 (3认同)
  • 一个公认的答案,“maxHttpHeaderSize="65536" **不工作** 因为 Tomcat 中的 **bug** 它以前工作过。URL/URI 与 HTTP 标头无关。 (3认同)

drA*_*erT 6

RFC2616 不强制执行HTTP GET 请求的长度,因为 Microsoft 报告了其IE 最大长度支持页面

因此,最大 GET 长度是客户端(浏览器)相关问题。如果你的应用程序被人们使用,你可以强制使用给定的浏览器,那么你可以简单地找到这个浏览器支持的长度。

在每种情况下,我都建议查看维基百科页面,了解有关 Query 字符串(请求为服务器端应用程序带来参数的部分,最终出现在请求中的“?”之后的那些浏览器相关问题。

当然,tomcat 可能也会在服务器端设置限制。RFC 说:

服务器必须能够处理它们所服务的任何资源的 URI,并且如果它们提供可以生成此类 URI 的基于 GET 的形式,则它们应该能够处理无限长度的 URI。如果 URI 的长度超出了服务器的处理能力,服务器应该返回 414(Request-URI Too Long)状态(参见第 10.4.15 节)。

所以你可以很容易地测试 Tomcat 是否有限制,并找出这个限制是什么,只是使用不同的请求,从一个很长的请求开始,然后下降一半。然后使用二分法快速找到精确值。