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
'Development Tip' 카테고리의 다른 글
"이미있는 프로그램 유형"은 무엇을 의미합니까? (0) | 2020.12.08 |
---|---|
적절한 Emacs를 어떻게 배우나요? (0) | 2020.12.08 |
자바 컴파일은 정확히 어떻게 이루어 집니까? (0) | 2020.12.08 |
graphviz에 의해 생성 된 그래프의 크기 (면적) 줄이기 (0) | 2020.12.08 |
PostgreSQL 정규식 단어 경계? (0) | 2020.12.08 |