我看了看,找到了答案,具有GET请求URL超过码头最大长度问题,有些人是设置在headerBufferSize到的jetty.xml是一个更大的数字在这个Solr的故障排除手册和本.
但是,我很难理解标头缓冲区大小与请求URL的长度有什么关系?如果设置headerBufferSize增加请求的URL长度限制,则headerBufferSize的6 KB值对应于请求URL的最大长度是多少?我问的原因是因为大多数浏览器强加的URL的最大长度大约为2000个字符,因为不同浏览器中URL的最大长度是多少?和headerBufferSize的单位是字节.
在典型的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
Run Code Online (Sandbox Code Playgroud)
打破这个:
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漏洞.
更新:2013年10月24日
请参阅与URL的最大长度相关的其他答案