代码之家  ›  专栏  ›  技术社区  ›  Brian Sullivan

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

  •  470
  • Brian Sullivan  · 技术社区  · 17 年前

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

    4 回复  |  直到 12 年前
        1
  •  1063
  •   Community Mohan Dere    4 年前

    RFC 2616 RFC 3986 (统一资源标识符URI)也表示没有限制,但表示由于DNS限制,主机名限制为255个字符(第2.3.3节)。

    虽然规范没有规定任何最大长度,但实际限制是由web浏览器和服务器软件施加的。基于研究,不幸的是,该研究在其原始网站上不再可用(它导致了一个看起来阴暗的贷款网站),但仍然可以在 Internet Archive Of Boutell.com :

    • Microsoft Edge(浏览器)
      限制大约为81578个字符。看见 URL Length limitation of Microsoft Edge

    • 铬
      它停了 展示

    • 浏览器(Firefox)
      在65536个字符之后,位置栏不再显示Windows Firefox 1.5.x中的URL。但是,更长的URL将起作用。100000个字符之后没有进行进一步的测试。

    • Safari(浏览器)

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

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

    • Apache(服务器)
      早期在web浏览器中测量最大URL长度的尝试遇到了大约4000个字符的服务器URL长度限制,之后Apache产生了“413实体太大”错误。使用了Red Hat Enterprise Linux 4中最新的Apache版本。Apache官方文档只提到请求中单个字段的8192字节限制。

    • Microsoft Internet信息服务器(服务器)
      默认限制为16384个字符(是的,Microsoft的web服务器接受比Microsoft的web浏览器更长的URL)。这是可配置的。

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

        2
  •  27
  •   TroySteven    5 年前

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

    虽然RFC2616没有规定正式的限制,但许多安全协议和建议指出,服务器上的MaxQueryString应设置为1024个字符的最大限制。而整个URL(包括查询字符串)应设置为最多2048个字符。这是为了防止web服务器上的慢速HTTP请求DDOS/DOS攻击漏洞。这通常表现为Qualys Web应用程序扫描程序和其他安全扫描程序上的漏洞。

    <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攻击,但这是您可以采取的一个步骤来防止它。

        3
  •  1
  •   kdevine    17 年前

    不同的web堆栈支持不同长度的http请求。根据我的经验,Safari的早期堆栈只支持4000个字符,因此由于用户状态的原因,很难处理ASP.net页面。这甚至适用于POST,因此您必须检查浏览器并查看堆栈限制。我认为,即使在较新的浏览器上,您也可能达到一个极限。我记不起来了,但其中一个(我想是IE6)有一个16位的限制,32768之类的。

        4
  •  1
  •   Yogi Ghorecha    5 年前

    虽然 官方没有限制 指定的 许多的 安全协议和建议指出: MaxQueryString 服务器上的字符数应设置为最大字符数限制 . 2048 人物。 块引用

    太久 如果超过 一 过长的URL可能会 搜索引擎 :您可能通过以下方式获得的任何潜在好处: 关键词 将 被稀释,因为它在总量中的比例很小 文本