查询string的最大可能长度是多less?

依赖于浏览器吗? 另外,不同的networking堆栈可以从请求获得多less数据有不同的限制?

RFC 2616 (超文本传输​​协议 – HTTP / 1.1)规定查询string的长度没有限制(第3.2.1节)。 RFC 3986也指出没有限制,但是由于DNS限制(见第2.3.3节),表明主机名限制在255个字符之内。

虽然规格没有规定任何最大长度,但实际限制是由networking浏览器和服务器软件强加的。 基于在Boutell.com上发现的研究:

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

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


  • 它停止显示 64k字符后的URL,但可以提供超过10万字符。 除此之外,没有进一步的testing。

  • Firefox(浏览器)
    在65,536个字符之后,地址栏不再显示Windows Firefox 1.5.x中的URL。 但是,更长的url将起作用。 100,000个字符后没有进一步的testing。

  • Safari(浏览器)
    至less有80,000个字符可以工作。 除此之外,testing没有尝试过。

  • Opera(浏览器)
    至less有190,000个字符可以使用。 19万字以后停止testing。 用于Windows的Opera 9继续在位置栏中显示完全可编辑,可复制和可粘贴的URL,即使在190,000个字符处也是如此。

  • Apache(服务器)
    早期尝试测量Web浏览器中的最大URL长度时,遇到大约4,000个字符的服务器URL长度限制,此后Apache产生“413实体太大”错误。 使用了红帽企业Linux 4中最新的Apache版本。 Apache官方文档仅提到了请求中单个字段的8,192字节限制。

  • Microsoft Internet信息服务器(服务器)
    默认限制是16384个字符(是的,微软的networking服务器比微软的网页浏览器接受更长的URL)。 这是可configuration的。

  • Perl HTTP ::守护进程(服务器)
    多达8000个字节将工作。 使用Perl的HTTP :: Daemon模块构buildWeb应用程序服务器的人将在所有HTTP请求标头的组合大小上遇到16,384字节的限制。 这不包括POST方法表单数据,file upload等,但它包含URL。 实际上,当URL长度超过8,000个字符时,会导致413错误。 这个限制可以很容易地删除。 在Daemon.pm中查找所有出现的16×1024,并用一个更大的值replace它们。 当然,这会增加您遭受拒绝服务攻击的风险。

我假设你的意思是一个uristring的最大长度。 这可能有帮助。

通常情况下,一旦URI由于太长而变得不可读,就应该使用POST请求来代替。

不同的web栈支持不同长度的http请求。 我从经验中知道,Safari的早期版本只支持4000个字符,因此在处理ASP.net页面时很困难,因为用户状态。 这甚至是POST,所以你将不得不检查浏览器,看看什么是堆栈限制。 我认为,即使在新的浏览器上,你也可能达到极限。 我不记得,但其中一个(IE6,我认为)有16位限制,32,768什么的限制。