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 长度是多少?的主要内容,如果未能解决你的问题,请参考以下文章
您可以传递给 Wininet 函数 HttpOpenRequest 的最大 URL 长度是多少?
在 Internet Explorer 中使用同步可插入协议的自定义 url 协议的最大长度是多少?