查询字符串的最大可能长度是多少?

时间:2009-05-01 19:44:16

标签: browser max query-string

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

4 个答案:

答案 0 :(得分:906)

RFC 2616(超文本传输​​协议 - HTTP / 1.1)声明查询字符串的长度没有限制(第3.2.1节)。 RFC 3986还声明没有限制,但表示由于DNS限制,主机名限制为255个字符(第2.3.3节)。

虽然规范未指定任何最大长度,但Web浏览器和服务器软件会施加实际限制。基于Boutell.com的研究结果:

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

  • Microsoft Edge(浏览器)
    限制似乎约为81578个字符。请参阅URL Length limitation of Microsoft Edge

  • <强>铬
    它会在64k字符后停止显示 URL,但可以提供超过10万个字符。除此之外,没有进行进一步的测试。

  • Firefox(浏览器)
    在65,536个字符后,位置栏不再显示Windows Firefox 1.5.x中的URL。但是,较长的网址可以使用。在100,000个字符后没有进行进一步的测试。

  • Safari(浏览器)
    至少80,000个字符可以使用。除此之外没有尝试过测试。

  • Opera(浏览器)
    至少190,000个字符可以使用。在190,000个字符后停止测试。 Opera 9 for Windows继续显示完全可编辑的, 位置栏中的可复制和可粘贴的URL,即使是190,000个字符。

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

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

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

答案 1 :(得分:2)

虽然官方没有限制,但许多安全配置建议声明服务器上的maxQueryStrings应设置为1024的最大字符数限制,而包含查询字符串的整个URL应设置为最多2048个字符。这是为了防止Web服务器上的慢速HTTP请求漏洞,以防止出现在Qualys Web应用程序扫描程序和其他安全扫描程序上的慢速DDOS攻击。

请参阅以下带有Web.config的Windows IIS服务器代码:

<security>
    <requestFiltering>
        <requestLimits maxQueryString="1024" maxUrl="2048">
           <headerLimits>
              <add header="Content-type" sizeLimit="100" />
           </headerLimits>
        </requestLimits>
     </requestFiltering>
</security>

答案 2 :(得分:1)

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

答案 3 :(得分:1)

2048 个字符

<块引用>

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

如果网址超过 100 个字符,则该网址会被视为过长过长的网址会导致可用性和搜索引擎:包含关键字可能带来的任何潜在好处 被稀释,因为它占总网址的一小部分 文本。