在典型的 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 到 Content-Length 行是请求标头。
- 该
POST
行在 HTTP 术语中被称为Request-Line,它包含方法 (POST) + abs_path (/to/my/path) + http 版本 (HTTP/1.1)
Content-Type
- 让我们知道正文内容是如何格式化/编码的。
Host
- 让服务器知道正在访问哪个主机(主要由虚拟主机设置使用)
Content-Length
- 让我们知道有 10 个字节的正文内容
- 是
Action=Add
POST 正文内容。
其核心是请求或响应的两个部分,标头和正文内容。
当您设置时,headerBufferSize
您正在设置标题内容(而不是正文内容)的最终上限。
当您拥有无限的标头大小时,会出现许多滥用/漏洞,从滥用内存消耗到导致 CPU 使用过多的故意 hashmap 冲突。限制标头缓冲区大小限制了此类问题的范围。(这些漏洞并不是 Jetty 独有的,而是存在于所有 Web 服务器上)
如果你达到了这些限制,你应该考虑评估你是如何使用 solr 的(例如当你应该使用 POST 时错误地使用了 GET),因为增加 headerBufferSize 也会让你面临各种已知的 Web 漏洞。
更新:2013 年 10 月 24 日
请参阅与URL 的最大长度有关的其他答案