我查看并发现有些人遇到GET请求URL超过Jetty最大长度问题的答案是将jetty.xml中的headerBufferSize设置为更大的数字,如this Solr troubleshooting manual和{{3} }。
但是,我很难理解标头缓冲区大小与请求URL的长度有什么关系?如果设置headerBufferSize增加请求的URL长度限制,则headerBufferSize的6 KB值对应于请求URL的最大长度是多少?我问的原因是因为大多数浏览器强加的URL的最大长度大约为2000个字符,如this和headerBufferSize的单位是字节。
答案 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
打破这个局面:
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日
相关的其他答案