代码之家  ›  专栏  ›  技术社区  ›  Stef

Apache的最大URL长度是多少?

  •  57
  • Stef  · 技术社区  · 15 年前

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

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

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

    6 回复  |  直到 6 年前
        1
  •  67
  •   Gumbo    14 年前

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

        2
  •  16
  •   lo_fye    15 年前
    • Internet Explorer:2083个字符,URL的路径部分不超过2048个字符
    • 火狐:显示65536个字符,但更长的URL即使超过100000个也仍然有效。
    • Safari:80000个字符
    • 歌剧:190000个字符
    • IIS:16384个字符,但可配置
    • Apache:4000个字符

    来自: http://www.danrigsby.com/blog/index.php/2008/06/17/rest-and-max-url-size/

        3
  •  6
  •   RightFullRudder    15 年前

    官方ApacheDocs的官方长度是8192,但许多人在4000左右遇到了麻烦。

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

        4
  •  3
  •   estani    10 年前

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

    你只需要某种可以用“x”扩展的URL,并且总是返回200(或者根据你的需要调整它)。在某个时刻,它将中断,脚本将显示最大长度。

    代码如下:

    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
    
        5
  •  2
  •   firfin Tom Lime    9 年前

    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太大

        6
  •  -1
  •   onlyme    6 年前

    请求行长度的默认限制是8192字节=8*1024。 如果要更改限制,必须在tomcat server.xml中添加或更新attribut maxhttpheadersize。

    AS:

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

    在这个例子中,我将限制设置为65536字节=64*1024。

    希望这会有所帮助。