【发布时间】:2010-10-23 05:05:25
【问题描述】:
它依赖于浏览器吗?另外,不同的网络堆栈对从请求中获取的数据量有不同的限制吗?
【问题讨论】:
-
仅适用于 GET 请求! POST 请求的最大大小(有或没有 multipart/form-data)在这里是未知的!
标签: browser max query-string
它依赖于浏览器吗?另外,不同的网络堆栈对从请求中获取的数据量有不同的限制吗?
【问题讨论】:
标签: browser max query-string
不同的网络堆栈支持不同长度的 http 请求。我从经验中知道,早期的 Safari 堆栈仅支持 4000 个字符,因此由于 USER-STATE 而难以处理 ASP.net 页面。这甚至适用于 POST,因此您必须检查浏览器并查看堆栈限制是多少。我认为即使在较新的浏览器上您也可能会达到限制。我不记得了,但其中一个(我认为是 IE6)有 16 位限制,32,768 或其他限制。
【讨论】:
RFC 2616(超文本传输协议 — HTTP/1.1)声明查询字符串的长度没有限制(第 3.2.1 节)。 RFC 3986 (Uniform Resource Identifier — URI) 也声明没有限制,但表示由于 DNS 限制,主机名限制为 255 个字符(第 2.3.3 节)。
虽然规范没有指定任何最大长度,但实际限制是由网络浏览器和服务器软件强加的。基于研究,不幸的是,在其原始网站上不再可用(它导致一个看似可疑的贷款网站),但仍然可以在 Internet Archive Of Boutell.com 找到:
Microsoft Edge(浏览器)
限制似乎是大约 81578 个字符。见URL Length limitation of Microsoft Edge
Chrome
它在 64k 个字符后停止显示 URL,但可以提供超过 100k 个字符。除此之外没有进行进一步的测试。
Firefox(浏览器)
在 65,536 个字符之后,位置栏不再显示 Windows Firefox 1.5.x 中的 URL。但是,更长的 URL 也可以。 100,000 个字符后没有进行进一步测试。
Safari(浏览器)
至少 80,000 个字符可以使用。除此之外没有尝试过测试。
Opera(浏览器)
至少 190,000 个字符可以使用。在 190,000 个字符后停止测试。 Opera 9 for Windows 继续显示完全可编辑、
即使是 190,000 个字符,也可以在地址栏中复制和粘贴 URL。
Microsoft Internet Explorer(浏览器)
Microsoft 声明 Internet Explorer 中 URL 的最大长度为 2,083 个字符,URL 的路径部分不超过 2,048 个字符。尝试使用比这更长的 URL 会在 Internet Explorer 中产生明确的错误消息。
Apache(服务器)
早期在 Web 浏览器中测量最大 URL 长度的尝试遇到了大约 4,000 个字符的服务器 URL 长度限制,之后 Apache 产生“413 Entity Too Large”错误。使用了 Red Hat Enterprise Linux 4 中最新的 Apache 构建。 Apache 官方文档仅提及请求中单个字段的 8,192 字节限制。
Microsoft Internet 信息服务器(服务器)
默认限制为 16,384 个字符(是的,Microsoft 的 Web 服务器接受比 Microsoft 的 Web 浏览器更长的 URL)。这是可配置的。
Perl HTTP::Daemon(服务器)
最多 8,000 个字节可以工作。那些使用 Perl 的 HTTP::Daemon 模块构建 Web 应用程序服务器的人将遇到所有 HTTP 请求标头的总大小限制为 16,384 字节。这不包括 POST 方法的表单数据、文件上传等,但它确实包括 URL。实际上,当 URL 明显超过 8,000 个字符时,这会导致 413 错误。这个限制可以很容易地消除。在 Daemon.pm 中查找所有出现的 16x1024 并将它们替换为更大的值。当然,这确实会增加您遭受拒绝服务攻击的风险。
【讨论】:
java.lang.IllegalArgumentException: Request header is too large。
推荐的安全性和性能最大值:2048 个字符
虽然官方没有 RFC 2616 规定的限制,但许多安全协议和建议规定服务器上的 maxQueryStrings 应设置为最大字符数限制 1024。而整个 URL(包括查询字符串)应设置为最多 2048 个字符。这是为了防止 Web 服务器上的慢速 HTTP 请求 DDOS/DOS 攻击漏洞。这通常显示为 Qualys Web Application Scanner 和其他安全扫描程序上的漏洞。
请参阅下面的带有 Web.config 的 Windows IIS 服务器的示例代码:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxQueryString="1024" maxUrl="2048">
<headerLimits>
<add header="Content-type" sizeLimit="100" />
</headerLimits>
</requestLimits>
</requestFiltering>
</security>
</system.webServer>
这也适用于使用 machine.config 的服务器级别。
这仅适用于基于 windows 操作系统的服务器,我不确定 apache 或其他服务器上是否存在类似问题。
注意:限制查询字符串和 URL 长度可能无法完全阻止慢速 HTTP 请求 DDOS 攻击,但这是您可以采取的一种预防措施。
【讨论】:
/get/records-by-id?ids=10000000001,1000000002,.... 的“简单”后端查询,但 ID 当然是 UUID。
虽然官方没有限制由 RFC 2616 指定,但许多 安全协议和建议声明 maxQueryStrings 服务器上的最大字符数限制应设置为 1024。 而整个 URL,包括查询字符串,应该设置为 最多 2048 个字符。 块引用
如果 URL 超过 100 个字符,则认为它太长。 过长的网址会导致可用性和搜索引擎:包含关键字可能会带来的任何潜在好处 被稀释,因为它占总 URL 的比例很小 文本。
【讨论】: