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

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


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

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

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

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


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

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

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

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

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

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

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


  • 我假设你的意思是一个uri字符串的最大长度。 这可能有帮助。

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


    不同的网络堆栈支持不同长度的http请求。 我从经验中知道,Safari的早期堆栈只支持4000个字符,因此由于USER-STATE而难以处理ASP.net页面。 这甚至是POST,所以你必须检查浏览器,看看堆栈限制是什么。 我认为即使在新的浏览器上你也可能达到极限。 我不记得,但其中一个(IE6,我认为)有16位限制,32,768什么的限制。

    链接地址: http://www.djcxy.com/p/7279.html

    上一篇: What is the maximum possible length of a query string?

    下一篇: AngularJS passing data to $http.get request