【问题标题】:What is apache's maximum url length?apache 的最大 url 长度是多少?
【发布时间】:2010-11-20 08:21:31
【问题描述】:

apache 中 URL 的最大长度是多少?它记录在哪里,是否可配置?

我正在实施一个 openid 身份提供程序,并且想知道我面临的限制。我知道 Internet Explorer 上的 2048 字节路径限制。这可以使用用户代理检测来专门处理。其他浏览器的 URL 限制要高得多。

所以我感兴趣的是编码应用程序时的 apache 服务器限制。

【问题讨论】:

标签: apache http url


【解决方案1】:

request line 长度的默认限制为 8190 字节(请参阅LimitRequestLine directive)。如果我们减去三个字节的请求方法(即GET),八个字节的版本信息(即HTTP/1.0/HTTP/1.1)和两个字节的分隔空间,我们最终得到8177字节的URI路径加查询。

【讨论】:

  • 你是对的。我用 Apache 2.2.11 对其进行了测试,调整 LimitRequestLine 效果很好。对于踢,我已经成功地将它与 128K 网址一起使用。
  • 您是否必须重新编译才能使用如此大的值?我的版本 (2.2.15) 会默默地忽略超过 8190 的 LimitRequestLine 指令,除非使用添加的 CFLAG "-D DEFAULT_LIMIT_REQUEST_LINE=16384" 重新编译(然后它最多允许 16384)。
  • 注意这是字节;使用 urlencoded 多字节字符,很容易达到这个限制(因为一个 n 字节字符占用 n*3 个字节: 变为 %E2%98%A2)。
  • 默默地忽略 2.2.22 上的指令。
【解决方案2】:
  • Internet Explorer:2,083 个字符,URL 的路径部分不超过 2,048 个字符
  • Firefox:显示 65,536 个字符,但即使超过 100,000 个字符,更长的 URL 仍然有效
  • Safari:> 80,000 个字符
  • Opera:> 190,000 个字符
  • IIS:16,384 个字符,但可配置
  • Apache:4,000 个字符

发件人:http://www.danrigsby.com/blog/index.php/2008/06/17/rest-and-max-url-size/

【讨论】:

【解决方案3】:

根据官方 Apache 文档,官方长度为 8,192,但很多人在大约 4,000 时遇到了麻烦。

无论如何,MS Internet Explorer 通常是限制因素,因为它将最大 URL 大小限制为 2,048。

【讨论】:

    【解决方案4】:

    在 GET 请求中允许的默认 URI 大小为 8177 个字符。 用于此类测试的 Python 中的简单代码。

    #!/usr/bin/env python2
    
    import sys
    import socket
    
    if __name__ == "__main__":
        string = sys.argv[1]
        buf_get = "x" * int(string)
        buf_size = 1024
        request = "HEAD %s HTTP/1.1\nHost:localhost\n\n" % buf_get
        print "===>", request
    
        sock_http = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock_http.connect(("localhost", 80))
        sock_http.send(request)
        while True:
           print "==>", sock_http.recv(buf_size)
           if not sock_http.recv(buf_size):
               break
        sock_http.close()
    

    在 8178 个字符上,您将收到这样的消息: HTTP/1.1 414 请求 URI 太大

    【讨论】:

    • 这是默认长度,可以通过 LimitRequestLine 配置指令进行更改。
    【解决方案5】:

    这是一个检查远程服务器最大限制的 bash 脚本(使用 curl 和 perl)。

    您只需要某种可以用“x”扩展并始终返回 200 的 url(或根据您的需要调整它)。在某些时候它会中断,脚本会显示最大长度。

    代码如下:

    url='http://someurl/someendpoint?var1=blah&token='
    ok=0
    times=1
    
    while :; do
        length=$((times+${#url}))
        echo trying with $length
        token=$(perl -le 'print "x"x'$times)
        result=$(curl -sLw '%{http_code}' -o /dev/null "${url}${token}")
    
        if [[ $result == 200 ]]; then
            if [[ $ok == $times ]]; then
                echo "max length is $length"
                break
            fi
            ok=$times
            times=$((times+1024))
        else
            times=$(((times+ok)/2))
        fi
    done
    

    【讨论】:

      【解决方案6】:

      请求行长度的默认限制为 8192 字节 = 8* 1024。 如果您想更改限制,则必须在您的 tomcat server.xml 中添加或更新属性 maxHttpHeaderSize。

      作为:

      <Connector port="8080" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... />
      

      在此示例中,我将限制设置为 65536 字节= 64*1024。

      希望这会有所帮助。

      【讨论】:

      • 问题是关于 Apache,而不是 Tomcat。
      猜你喜欢
      • 2012-05-20
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 2015-11-24
      • 2011-09-22
      • 2016-07-13
      • 2014-07-22
      相关资源
      最近更新 更多