什么是Apache的最大URL长度?
apache中URL的最大长度是多less? 它在哪里logging,可configuration?
我正在实施一个公开的身份提供者,并希望知道我所面临的限制。 我知道Internet Explorer上2048字节的path限制。 这可以使用用户代理检测专门处理。 其他浏览器具有更高的URL限制。
所以我感兴趣的是编码应用程序时,Apache服务器的限制。
请求行长度的默认限制是8190字节(请参阅LimitRequestLine
指令 )。 如果我们减去请求方法的三个字节(即GET
),八个字节的版本信息(即HTTP/1.0
/ HTTP/1.1
)和两个字节的分隔空间,我们最终得到了8177字节的URIpath加查询。
- Internet Explorer:2,083个字符,URL的path部分不超过2,048个字符
- Firefox:显示65,536个字符,但更长的URL仍然可以工作10万次以上
- Safari:> 80,000个字符
- 歌剧:> 19万个字符
- IIS:16,384个字符,但可configuration
- 阿帕奇:4000个字符
来自: http : //www.danrigsby.com/blog/index.php/2008/06/17/rest-and-max-url-size/
官方的Apache官方文档是8,192,但是很多人遇到了大约4000的麻烦。
无论如何,MS Internet Explorer通常是限制因素,因为它限制了2,048的最大URL大小。
这是一个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
GET请求中允许默认的URI大小为8177个字符。 python中的简单代码用于这种testing。
#!/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太大