2009-05-01 112 views
425

是否依赖于浏览器?另外,不同的Web堆栈对于从请求中获得的数据量有多少限制?查询字符串的最大可能长度是多少?

+0

你也可以检查这个http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-an-url – Xinus 2009-12-13 04:41:40

+0

它只适用于GET请求! POST请求的最大大小(带或不带multipart/form-data)在这里是未知的! – peterh 2015-01-22 13:54:52

回答

796

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

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

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

  • 微软边缘(浏览器)
    极限似乎是围绕81578个字符。见URL Length limitation of Microsoft Edge


  • 它停止显示在URL后64K字,但能为超过10万个字。除此之外,没有进一步的测试。

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

  • Safari浏览器(浏览器)
    至少80,000个字符会工作。除此之外,测试还没有尝试过。

  • 歌剧院(浏览器)
    至少有19万个字符会工作。 190,000个字符后停止测试。 Opera 9 for Windows继续在地址栏中显示完全可编辑的 可复制和可粘贴的URL,即使在190,000个字符处也是如此。

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

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

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

7

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

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

+38

仅仅因为有太多的数据不适合GET请求就切换到POST请求是没有意义的。 – 2010-11-09 10:20:46

1

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

0

虽然官方没有任何限制,许多安全配置建议指出,在服务器上maxQueryStrings应设置为1024字符数限制,而包括查询字符串整个URL应设置为2048最大字符。这是为了防止Web服务器上的缓慢HTTP请求漏洞,以防止缓慢的DDOS攻击。

相关问题