3

我查看并发现某些人的 GET 请求 URL 超过 Jetty 中的最大长度的问题的答案是将 jetty.xml 中的 headerBufferSize 设置为更大的数字,如本 Solr 故障排除手册this

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

4

1 回答 1

11

在典型的 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=AddPOST 正文内容。

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

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

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

如果你达到了这些限制,你应该考虑评估你是如何使用 solr 的(例如当你应该使用 POST 时错误地使用了 GET),因为增加 headerBufferSize 也会让你面临各种已知的 Web 漏洞。

更新:2013 年 10 月 24 日

请参阅与URL 的最大长度有关的其他答案

于 2013-10-23T20:18:44.043 回答