在一个典型的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)+绝对路径(/到/我/路径)+ HTTP版本(HTTP/1.1)
Content-Type
- 让我们知道正文内容是如何格式化/编码的。
Host
- 让服务器知道正在访问哪些主机(主要用于虚拟主机设置)
Content-Length
- 让我们知道有正文内容为10字节
- 的
Action=Add
是POST正文内容。
它的核心有2个部分的请求或响应,标题和正文内容。
当您设置headerBufferSize
时,您正在设置标题内容(非主体内容)的最终上限。
当您拥有无限制的标头大小(从滥用内存消耗到导致CPU使用过多的故意HashMap冲突)时,会出现大量的滥用/漏洞。限制标题缓冲区大小限制了这些问题的范围。 (这些漏洞并非Jetty独有,但对所有Web服务器都存在)
如果您遇到了这些限制,您应该考虑评估您如何使用solr(例如在应该使用POST时错误地使用GET),因为增加headerBufferSize也会让你知道各种已知的网络漏洞。
更新:2013年10月24日
见相关What is the maximum length of a URL
我不是想增加'headerBufferSize'但更多的好奇,想知道什么是GET请求的最大长度其他答案URL。根据你的回答,我假设要知道URL的最大允许大小的唯一方法是通过获取最大头部缓冲区大小(由Jetty允许)并减去头部大小(不包含请求URL)来计算。这是对的吗? –
添加更新以回答指向其他更详细的关于URL长度的答案。 (这个问题是浏览器的具体问题,但答案不是) –
感谢您的信息。为了清楚起见,我在工作中被问到找出Jetty可以接受的请求URL的最大长度。由于我的Jetty服务器接受由浏览器生成的编程请求,因此我必须记录GET方法的最大长度,用户可以安全地使用该方法将请求发送到我的服务器。如果我发出一个很大的数字,它们可能会遇到问题,如果它们添加到请求的请求URL +标头的大小超过了允许的“headerBufferSize”。现在,想一想,我可能只是给出'headerBufferSize'的值并让用户决定。 –