什么是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太大