apache 的最大 url 长度是多少?

Posted

技术标签:

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

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

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

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

【问题讨论】:

复制:***.com/questions/417142/… 不重复。但是 S.Lott 中引用的一个很有用。 OP 要求特定服务器的限制。 【参考方案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/

【讨论】:

引用的链接已失效。 还是 web.archive.org/web/20120330062735/http://www.danrigsby.com:80/…【参考方案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。

以上是关于apache 的最大 url 长度是多少?的主要内容,如果未能解决你的问题,请参考以下文章

URL/URI最大长度是多少

URL 路径中的段的安全最大长度应该是多少?

您可以传递给 Wininet 函数 HttpOpenRequest 的最大 URL 长度是多少?

在 Internet Explorer 中使用同步可插入协议的自定义 url 协议的最大长度是多少?

GET方法和POST方法的区别,Get方法到底可传递的字符串的最大长度是多少?

GET请求的长度限制?