Какова максимальная длина url-адреса apache?
какова максимальная длина URL-адреса в apache? Где это задокументировано, и это настраивается?
я внедряю провайдер идентификации openid и хотел бы знать ограничения, с которыми я сталкиваюсь. Я знаю об ограничении пути 2048 байт в Internet Explorer. Это может быть обработано специально с помощью обнаружения агента пользователя. Другие браузеры имеют гораздо более высокие ограничения URL.
Так что меня интересуют ограничения сервера apache при кодировании приложения.
6 ответов:
ограничение по умолчанию для длины запрос в строке составляет 8190 байт (см.
LimitRequestLineдиректива). И если мы вычитаем три байта для метода запроса (т. е.GET), восемь байт для информации о версии (т. е.HTTP/1.0/HTTP/1.1) и два байта для разделяющего пространства, мы получаем 8177 байт для пути URI плюс запрос.
- Internet Explorer: 2,083 символа, с не более чем 2,048 символов в части пути URL
- Firefox: появляется 65 536 символов, но более длинные URL-адреса все еще работают даже после 100 000
- Safari: > 80 000 символов
- Opera: > 190 000 символов
- IIS: 16 384 символов, но настраивается
- Apache: 4000 символов
от: 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).
вам просто нужен какой-то url, который можно расширить с помощью " x " и всегда возвращать 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
допустимый размер 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 запрос-URI слишком большой
ограничение по умолчанию для длины строки запроса составляет 8192 байта = 8* 1024. Если вы хотите изменить лимит, вы должны добавить или обновить его на своем сервере tomcat.XML-код maxHttpHeaderSize атрибута.
как:
<Connector port="8080" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... />в этом примере я установил лимит в 65536 байт= 64*1024.
надеюсь, что это поможет.
Comments