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


43

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

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

Answers:


60

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

<Connector port="8080" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... />

3
非常有用,用Solr解决了我的问题。似乎我们在server.xml配置中刮擦默认的8192限制时,没有注意到,然后突然击中它。痛苦的陷阱:没有任何记录,连接被静默删除(我不再记得HTTP状态了)。之前,我在tomcat.apache.org/tomcat-5.5-doc/config/http.html上偶然浏览了该文档,但是我也没有将maxHttpHeaderSize其名称或描述与GET请求查询参数本身相关联。
标记

我们也正好碰到同样的限制Solr中,只是一个空白页... :(该maxHttpHeaderSize的伎俩。
user85116

我认为maxHttpHeaderSize =“ 100000”是不可能的,应该乘以1024。我已经将maxHttpHeaderSize =“ 1048576”更改为1024 * 1024,但仍然无法正常工作。

3
一个公认的答案,“maxHttpHeaderSize =” 65536" 不工作这工作之前,由于错误。在Tomcat的URL / URI无关,与HTTP头。
福阿德·芬迪

1
@FuadEfendi那么现在的最大大小是多少?
mjaggard

5

RFC2616并未规定 HTTP GET请求的长度,因为Microsoft报告了其IE最大长度支持页面

因此,最大GET长度是与客户端(浏览器)相关的问题。如果您的应用被人们使用,则可以强制使用给定的浏览器,然后您只需找到该浏览器支持的长度即可。

在每种情况下,我都建议您浏览一下Wikypedia页面,以了解查询字符串上与浏览器相关的问题(请求中为服务器端应用程序带来参数的部分,请求中最终出现“?”的部分)。

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

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

因此,您可以轻松地测试Tomcat是否有限制,并简单地使用不同的请求找出此限制是什么,从一个很长的请求开始,直到出现错误,然后再减少一半。然后使用二等分法快速找到确切值。


阿尔伯特(Albert),我知道Tomcat有一个开箱即用的限制(类似8K);我想知道是否存在甚至无法克服的限制。
Michael Gundlach

2

对于AJP连接器,您需要调整packetSize属性:

<Connector port="8009" 
    protocol="AJP/1.3" 
    packetSize="65536" />

1
如果您使用的是mod_proxy,则也需要ProxyIOBufferSize 65536 在httpd配置中进行设置。
自杀

1

您可以在Tomcat服务器(.. \ Tomcat 6.0 \ conf \ server.xml)上更改配置。

<连接器端口=“ 8983” maxHttpHeaderSize =“ 100000”协议=“ HTTP / 1.1” connectionTimeout =“ 20000” redirectPort =“ 8443” />


您可以通过格式化代码并解释为什么回答OP问题来改善此答案。
james.garriss 18/09/13
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.