2009-08-17 142 views
53

apache中URL的最大長度是多少?它在哪裏記錄,可配置?什麼是apache的最大url長度?

我正在實施一個openid身份提供程序,並希望知道我遇到的限制。我知道Internet Explorer上2048字節的路徑限制。這可以使用用戶代理檢測專門處理。其他瀏覽器的URL限制更高。

所以我感興趣的是編碼應用程序時,Apache服務器的限制。

+0

Duplicate:http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-an-url – 2009-08-17 18:29:48

+6

不重複。但是從S.Lott引用的一個很有用。 OP正在詢問特定服務器的限制。 – maxwellb 2009-08-17 19:13:05

回答

63

request line的長度默認限制爲8190個字節(參照LimitRequestLine directive)。如果我們減去請求方法的三個字節(即GET),八個字節的版本信息(即HTTP/1.0/HTTP/1.1)和兩個字節的分隔空間,我們最終得到8177字節的URI路徑加上查詢。

+7

你說得對。我用Apache 2.2.11測試了它,調整LimitRequestLine的效果很好。對於踢球,我已經成功地使用它與128K的網址。 – Stef 2009-08-17 22:46:24

+3

你是否需要重新編譯才能使用這麼大的值?我的版本(2.2.15)默默地忽略了8190以上的LimitRequestLine指令,除非用添加的CFLAG「-D DEFAULT_LIMIT_REQUEST_LINE = 16384」重新編譯(然後它最多允許16384)。 – 2010-05-19 17:33:21

+4

請注意,這是__bytes__;使用urlencoded多字節字符時,很容易達到此限制(因爲n字節字符需要n * 3個字節:''變成'%E2%98%A2')。 – Piskvor 2011-02-04 10:15:39

6

根據官方Apache文檔的官方長度是8,192,但許多人遇到麻煩約4000。

無論如何,MS Internet Explorer通常是限制因素,因爲它限制了最大URL大小爲2,048。

15
  • Internet Explorer中:2,083個字符,在
  • Firefox的URL的路徑部分不超過2,048個字符:65,536個字符顯示,但更長的URL仍舊過去的10
  • 野生動物園工作甚至達到: > 80000個字符
  • 歌劇:> 19萬個字
  • IIS:16,384個字符,但配置
  • 阿帕奇:4,000個字符

來自:http://www.danrigsby.com/blog/index.php/2008/06/17/rest-and-max-url-size/

+3

引用的鏈接已死亡。 – Starx 2016-10-13 11:19:04

+0

*或者是https://web.archive.org/web/20120330062735/http://www.danrigsby.com:80/blog/index.php/2008/06/17/rest-and-max- url-size – samdd 2017-11-12 22:05:14

2

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

+1

這是默認長度,可以使用LimitRequestLine配置指令進行更改。 – Stef 2011-09-15 06:32:32

3

這裏有一個bash腳本來檢查遠程服務器的最大極限(使用捲曲和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 
0

請求行的長度默認限制爲8192字節= 8 * 1024 它要更改限制,您必須在添加或更新您的tomcat server.xml的attribut maxHttpHeaderSize。

爲:

<Connector port="8080" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... /> 

在這個例子中我的LIMITE設置爲65536個字節= 64 * 1024。

希望這會有所幫助。