Development Tip

Apache의 최대 URL 길이는 얼마입니까?

yourdevel 2020. 12. 8. 20:06
반응형

Apache의 최대 URL 길이는 얼마입니까?


Apache에서 URL의 최대 길이는 얼마입니까? 어디에 문서화되어 있으며 구성 할 수 있습니까?

저는 openid ID 공급자를 구현하고 있으며 제가 직면 한 제한 사항을 알고 싶습니다. Internet Explorer의 2048 바이트 경로 제한에 대해 알고 있습니다. 사용자 에이전트 감지를 사용하여 특별히 처리 할 수 ​​있습니다. 다른 브라우저에는 훨씬 더 높은 URL 제한이 있습니다.

그래서 제가 관심있는 것은 애플리케이션을 코딩 할 때 아파치 서버 제한입니다.


요청 라인 길이의 기본 제한 은 8190 바이트입니다 ( LimitRequestLine지시문 참조 ). 그리고 요청 메서드 (예 :)에 대해 3 바이트 GET, 버전 정보 (예 : HTTP/1.0/ HTTP/1.1)에 대해 8 바이트 , 분리 공간에 대해 2 바이트를 빼면 URI 경로와 쿼리에 대해 8177 바이트가됩니다.


  • Internet Explorer : 2,083 자, URL의 경로 부분에 2,048 자 이하
  • Firefox : 65,536자가 표시되지만 더 긴 URL은 100,000을 넘더라도 여전히 작동합니다.
  • 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/


공식 Apache 문서에 따르면 공식 길이는 8,192 개이지만 많은 사람들이 ~ 4,000에서 문제를 겪었습니다.

MS Internet Explorer는 최대 URL 크기를 2,048로 제한하므로 일반적으로 제한 요소입니다.


다음은 원격 서버의 최대 제한을 확인하는 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

허용되는 기본 URI 크기는 GET 요청에서 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 Request-URI Too Large


The default limit for the length of the request line is 8192 bytes = 8* 1024. It you want to change the limit, you have to add or update in your tomcat server.xml the attribut maxHttpHeaderSize.

as:

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

In this example I set the limite to 65536 bytes= 64*1024.

Hope this will help.

참고URL : https://stackoverflow.com/questions/1289585/what-is-apaches-maximum-url-length

반응형