在Jetty中设置最大URL长度

时间:2013-10-23 18:05:47

标签: url jetty

我查看并发现有些人遇到GET请求URL超过Jetty最大长度问题的答案是将jetty.xml中的headerBufferSize设置为更大的数字,如this Solr troubleshooting manual和{{3} }。

但是,我很难理解标头缓冲区大小与请求URL的长度有什么关系?如果设置headerBufferSize增加请求的URL长度限制,则headerBufferSize的6 KB值对应于请求URL的最大长度是多少?我问的原因是因为大多数浏览器强加的URL的最大长度大约为2000个字符,如this和headerBufferSize的单位是字节。

1 个答案:

答案 0 :(得分:9)

在典型的POST请求中,您将看到以下内容......

POST /to/my/path HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
Host: https://my.machine.com
Content-Length: 10

Action=Add

打破这个局面:

  • 通过Content-Length行的POST是请求标题。
    • POST行在HTTP术语中已知为Request-Line,它包含方法(POST)+ abs_path(/ to / my / path)+ http version(HTTP / 1.1)
    • Content-Type - 让我们知道正文内容的格式/编码方式。
    • Host - 让服务器知道正在访问的主机(主要由虚拟主机设置使用)
    • Content-Length - 让我们知道有10个字节的正文内容
  • Action=Add是POST正文内容。

其核心是请求或响应的两个部分,即标题和正文内容。

当您设置headerBufferSize时,您正在设置标题内容的最终上限(不是正文内容)。

当您拥有无限的标头大小(从滥用内存消耗到故意的散列图冲突,导致过多的CPU使用)时,会出现许多滥用/漏洞。限制标头缓冲区大小限制了这些问题的范围。 (这些漏洞并非Jetty独有,但对所有Web服务器都存在)

如果达到这些限制,则应考虑评估使用solr的方式(例如在使用POST时错误地使用GET),因为增加headerBufferSize也会打开各种已知的Web漏洞。< / p>

更新:2013年10月24日

请参阅与What is the maximum length of a URL

相关的其他答案