它是可配置的吗?我可以设置 Tomcat,以便具有 200K 个查询参数的 URL 能够成功到达所包含的 servlet 吗?
是的,我知道当您有大量数据时应该使用 POST;在这个特定情况下,这是一个不太好的选择。所包含的应用程序(搜索引擎)需要 GET 请求来执行搜索。
答案1
您可以编辑 tomcat/conf/server.xml 的 HTTP/1.1 Connector 条目,并添加 maxHttpHeaderSize="65536",将默认最大值从 8K 左右增加到 64K。我想您可以根据需要将此数字增加到最高,但目前 64K 足以满足我的需求,所以我还没有尝试过。
<Connector port="8080" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... />
答案2
HTTP GET 请求的长度不受 RFC2616 强制执行微软在其报告中称IE 最大长度支持页面。
所以,最大 GET 长度是与客户端(浏览器)相关的问题。如果您的应用程序被人们强制使用特定的浏览器,那么您可以简单地找到该浏览器支持的长度。
在每种情况下我都建议看一下维基百科有关查询字符串(请求中为服务器端应用程序带来参数的部分,即请求中最终出现的“?”后面的部分)的浏览器相关问题的页面。
当然,在服务器端,tomcat 可能也会设置限制。RFC 指出:
服务器必须能够处理其提供的任何资源的 URI,并且如果它们提供可以生成此类 URI 的基于 GET 的表单,则应能够处理长度不受限制的 URI。如果 URI 的长度超出服务器可以处理的范围,则服务器应返回 414(请求 URI 太长)状态(请参阅第 10.4.15 节)。
因此,您可以轻松测试 Tomcat 是否有限制,并找出此限制是什么,只需使用不同的请求即可,从一个非常长的请求开始,给出错误,然后减少一半。然后使用二分法快速找到确切的值。
答案3
对于AJP连接器,需要调整packetSize
属性:
<Connector port="8009"
protocol="AJP/1.3"
packetSize="65536" />
答案4
您可以在 Tomcat 服务器上更改配置( ..\Tomcat 6.0\conf\server.xml )
< Connector port="8983" maxHttpHeaderSize="100000" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />