Какова максимальная длина URL-адреса Apache?
Какова максимальная длина URL-адреса в apache? Где он задокументирован и настраивается?
Я реализую провайдер идентификации openid и хочу знать ограничения, против которых я против. Я знаю о ограничении байтов в 2048 байтов в Internet Explorer. Это можно обрабатывать специально, используя обнаружение агента пользователя. Другие браузеры имеют гораздо более высокие пределы URL.
Итак, меня интересует ограничение сервера Apache при кодировании приложения.
Ответы
Ответ 1
Предел по умолчанию для длины строки запроса составляет 8190 байт (см. LimitRequestLine
). И если мы вычтем три байта для метода запроса (т.е. GET
), восемь байтов для информации о версии (т.е. HTTP/1.0
/HTTP/1.1
) и два байта для разделительного пространства, мы получим 8177 байт для URI путь плюс запрос.
Ответ 2
- Internet Explorer: 2083 символа с не более чем 2048 символами в части пути URL-адреса.
- Firefox: появилось 65 536 символов, но более длинные URL-адреса все еще работают даже до 100 000
- Safari: > 80 000 символов
- Опера: > 190 000 символов
- IIS: 16 384 символа, но настраивается
- Apache: 4000 символов
От: http://www.danrigsby.com/blog/index.php/2008/06/17/rest-and-max-url-size/
Ответ 3
Официальная длина в соответствии с официальными документами Apache составляет 8 192, но многие люди столкнулись с проблемой на ~ 4000.
MS Internet Explorer обычно является ограничивающим фактором, так как он ограничивает максимальный размер URL на 2,048.
Ответ 4
Здесь bash script, чтобы проверить максимальный предел удаленного сервера (использует curl и perl).
Вам просто нужен какой-то URL-адрес, который можно расширить с помощью "x" и всегда возвращать 200 (или адаптировать его к вашим потребностям). В какой-то момент он сломается, а script отобразит максимальную длину.
Здесь код:
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
Ответ 5
Разрешенный размер URI по умолчанию - 8177 символов в запросе GET.
Простой код в 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