Какова максимальная длина url-адреса apache?

какова максимальная длина URL-адреса в apache? Где он документирован и настраивается?

я реализую поставщик удостоверений openid и хотел бы знать ограничения, с которыми я сталкиваюсь. Я знаю об ограничении пути 2048 байтов в Internet Explorer. Это может быть обработано специально с помощью обнаружения агента пользователя. Другие браузеры имеют гораздо более высокие ограничения URL.

Итак, меня интересуют ограничения сервера apache при кодировании приложения.

6 ответов


ограничение по умолчанию для длины запрос в строке составляет 8190 байт (см. LimitRequestLine директива). И если вычесть три байта для метода запроса (т. е. GET), восемь байт для информации о версии (т. е. HTTP/1.0/HTTP/1.1) и два байта для разделяющего пространства, мы заканчиваем с 8177 байтами для URI path plus query.


  • 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.

as:

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

в этом примере я установил limite в 65536 байт= 64*1024.

надеюсь, это поможет.