65 votes

Quelle est la longueur maximale d'URL d'apache?

Quelle est la longueur maximale d'une URL dans Apache? Où est-il documenté et est-il configurable?

J'implémente un fournisseur d'identité openid et aimerais connaître les limites auxquelles je suis confronté. Je connais la limite de chemin d'accès de 2 048 octets d'Internet Explorer. Cela peut être traité spécialement en utilisant la détection d'agent utilisateur. Les autres navigateurs ont des limites d'URL beaucoup plus élevées.

Donc, ce qui m'intéresse, ce sont les limites du serveur Apache lors du codage d'une application.

75voto

Gumbo Points 279147

La limite par défaut de la longueur de la ligne de demande est 8190 octets (voir LimitRequestLine de la directive). Et si nous soustrayons les trois octets pour la méthode de la requête (c'est à dire GET), huit octets pour les informations de version (c - HTTP/1.0/HTTP/1.1) et de deux octets pour la séparation de l'espace, nous nous retrouvons avec 8177 octets pour le chemin de l'URI en plus de la requête.

18voto

lo_fye Points 4422
  • Internet Explorer: 2 083 caractères, avec pas plus de 2 048 caractères dans la partie du chemin d'accès de l'URL
  • Firefox: 65 536 caractères montrer, mais plus les Url ne fonctionne toujours même jusqu'à passé de 100 000
  • Safari: > à 80 000 caractères
  • Opera: > de 190 000 caractères
  • IIS: 16,384 personnages, mais configurable
  • Apache: 4 000 caractères

De: http://www.danrigsby.com/blog/index.php/2008/06/17/rest-and-max-url-size/

7voto

RightFullRudder Points 414

Selon la documentation officielle d'Apache, la longueur officielle est de 8 192, mais beaucoup de gens ont eu des problèmes à environ 4 000.

Quoi qu'il en soit, MS Internet Explorer est généralement le facteur limitant, car il limite la taille maximale de l'URL à 2 048.

5voto

Tom Lime Points 139

La taille autorisée de l'URI est de 8177 caractères dans la requête GET. Code simple en python pour de tels tests.

 #!/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()
 

Ce message contient 8178 caractères: HTTP / 1.1 414 Request-URI Too Large

3voto

estani Points 1167

Voici un script bash pour vérifier la limite maximale d’un serveur distant (utilise curl et perl).

Vous avez juste besoin d'une sorte d'URL qui peut être étendue avec 'x' et qui renvoie toujours 200 (ou l'adaptez à vos besoins). À un moment donné, cela casserait et le script afficherait la longueur maximale.

Voici le code:

 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
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X