Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是apache';最大url长度是多少?_Apache_Http_Url - Fatal编程技术网

什么是apache';最大url长度是多少?

什么是apache';最大url长度是多少?,apache,http,url,Apache,Http,Url,apache中URL的最大长度是多少?文件记录在哪里,是否可配置 我正在实现一个openid身份提供者,我想知道我面临的限制。我知道Internet Explorer上的2048字节路径限制。可以使用用户代理检测进行特殊处理。其他浏览器有更高的URL限制 所以我感兴趣的是apache在编写应用程序时的服务器限制 根据官方Apache文档,官方长度为8192,但许多人在4000左右遇到了麻烦 MS Internet Explorer通常是限制因素,因为它将最大URL大小限制在2048。 Inter

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

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


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

根据官方Apache文档,官方长度为8192,但许多人在4000左右遇到了麻烦

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

  • Internet Explorer:2083个字符,URL的路径部分不超过2048个字符
  • Firefox:显示65536个字符,但即使超过100000个,更长的URL仍然有效
  • Safari:>80000个字符
  • 歌剧:超过190000个字符
  • IIS:16384个字符,但可配置
  • Apache:4000个字符

From:

的默认长度限制为8190字节(请参阅)。如果我们为请求方法减去三个字节(即
GET
),为版本信息减去八个字节(即
HTTP/1.0
/
HTTP/1.1
),为分隔空间减去两个字节,那么URI路径加上查询将得到8177个字节。

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

这里有一个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

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

作为:


在本例中,我将限制设置为65536字节=64*1024


希望这会有所帮助。

复制:不复制。但是S.洛特的参考文献是有用的。OP要求特定服务器的限制。你是对的。我用Apache2.2.11测试了它,调整LimitRequestLine效果很好。对于kicks,我已经成功地将其用于128K URL。您是否必须重新编译才能使用如此大的值?我的版本(2.2.15)默认忽略8190以上的LimitRequestLine指令,除非使用添加的CFLAG“-D DEFAULT_LIMIT_REQUEST_LINE=16384”重新编译(然后最多允许16384)。请注意,这是个字节;对于URL编码的多字节字符,很容易达到这一限制(因为一个n字节字符需要n*3个字节:
变为
%E2%98%A2
)。也会自动忽略2.2.22上的指令。这是默认长度,可以使用LimitRequestLine配置指令进行更改。引用的链接无效。或者问题是关于Apache,而不是Tomcat。
<Connector port="8080" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... />