625

它依赖于浏览器吗?此外,不同的 Web 堆栈对从请求中获取的数据量有不同的限制吗?

4

4 回答 4

1080

RFC 2616(超文本传输​​协议 - HTTP/1.1)声明查询字符串的长度没有限制(第 3.2.1 节)。RFC 3986(统一资源标识符 — URI)也声明没有限制,但指出由于 DNS 限制,主机名限制为 255 个字符(第 2.3.3 节)。

虽然规范没有指定任何最大长度,但实际限制是由网络浏览器和服务器软件强加的。基于研究,不幸的是其原始网站上不再提供(它导致一个看似可疑的贷款网站),但仍然可以在 Boutell.com 的 Internet 档案中找到:

  • Microsoft Edge(浏览器)
    限制似乎约为 81578 个字符。请参阅Microsoft Edge 的 URL 长度限制

  • 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 继续在地址栏中显示完全可编辑、可复制和可粘贴的 URL,即使是 190,000 个字符。

  • Microsoft Internet Explorer(浏览器)
    Microsoft 声明 Internet Explorer 中 URL 的最大长度为 2,083 个字符,URL 的路径部分不超过 2,048 个字符。尝试使用比这更长的 URL 会在 Internet Explorer 中产生明确的错误消息。

  • Apache(服务器)
    早期尝试在 Web 浏览器中测量最大 URL 长度时遇到了服务器 URL 长度限制,大约为 4,000 个字符,之后 Apache 产生“413 Entity Too Large”错误。使用了 Red Hat Enterprise Linux 4 中最新的 Apache 构建。官方 Apache 文档仅提及请求中单个字段的 8,192 字节限制。

  • Microsoft Internet Information Server (Server)
    默认限制为 16,384 个字符(是的,Microsoft 的 Web 服务器接受比 Microsoft 的 Web 浏览器更长的 URL)。这是可配置的。

  • Perl HTTP::Daemon (Server)
    最多 8,000 字节可以工作。那些使用 Perl 的 HTTP::Daemon 模块构建 Web 应用程序服务器的人将遇到所有 HTTP 请求标头的总大小限制为 16,384 字节。这不包括 POST 方法的表单数据、文件上传等,但它确实包括 URL。实际上,当 URL 明显超过 8,000 个字符时,这会导致 413 错误。这个限制可以很容易地消除。在 Daemon.pm 中查找所有出现的 16x1024 并将它们替换为更大的值。当然,这确实会增加您遭受拒绝服务攻击的风险。

于 2009-05-01T19:53:30.400 回答
34

建议的安全性和性能最大值:2048 个字符

尽管官方没有 RFC 2616 规定的限制,但许多安全协议和建议规定服务器上的 maxQueryStrings 应设置为最大字符限制 1024。而整个 URL(包括查询字符串)应设置为最大 2048人物。这是为了防止 Web 服务器上的慢速 HTTP 请求 DDOS/DOS 攻击漏洞。这通常显示为 Qualys Web 应用程序扫描程序和其他安全扫描程序上的漏洞。

请参阅以下带有 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 攻击,但这是您可以采取的阻止它的一个步骤。

于 2018-01-12T16:37:00.433 回答
1

不同的 Web 堆栈确实支持不同长度的 http 请求。我从经验中知道,早期的 Safari 堆栈仅支持 4000 个字符,因此由于 USER-STATE 而难以处理 ASP.net 页面。这甚至适用于 POST,因此您必须检查浏览器并查看堆栈限制是多少。我认为即使在较新的浏览器上您也可能会达到限制。我不记得但其中一个(我认为是 IE6)有 16 位限制,32,768 或其他限制。

于 2009-05-01T19:52:11.243 回答
1

2048 个字符

虽然官方没有RFC 2616指定限制,但许多安全协议和建议声明服务器上的maxQueryStrings 应设置为最大字符限制1024。而整个 URL(包括查询字符串)应设置为最多2048个字符。块引用

如果 URL超过100 个字符,则认为 URL太长过长的 URL 可能会导致可用性和搜索引擎:包含关键字可能带来的任何潜在好处都将被稀释,因为它在总URL 文本中所占的比例很小。

于 2021-05-05T14:16:47.833 回答