web-dev-qa-db-fra.com

Quelle est la longueur d'URL maximale 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 j'aimerais connaître les limitations auxquelles je suis confronté. Je connais la limite de chemin d'accès de 2048 octets sur Internet Explorer. Cela peut être géré spécialement à l'aide de la détection d'agent utilisateur. D'autres navigateurs ont des limites d'URL beaucoup plus élevées.

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

59
Stef

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

67
Gumbo
  • Internet Explorer: 2 083 caractères, avec 2 048 caractères au maximum dans la partie chemin de l'URL
  • Firefox: 65 536 caractères s'affichent, mais les URL plus longues fonctionnent toujours même après 100 000
  • Safari:> 80 000 caractères
  • Opéra:> 190 000 personnages
  • IIS: 16 384 caractères, mais est configurable
  • Apache: 4000 caractères

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

17
lo_fye

La longueur officielle selon les documents officiels d'Apache est de 8 192, mais beaucoup de gens ont rencontré des problèmes à environ 4 000.

MS Internet Explorer est généralement le facteur limitant de toute façon, car il limite la taille maximale de l'URL à 2048.

6
RightFullRudder

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 toujours renvoyer 200 (ou l'adapter à vos besoins). À un moment donné, il se cassera et le script affichera 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
3
estani

La taille par défaut autorisée de l'URI est de 8177 caractères dans la demande GET. Code simple en python pour de tels tests.

#!/usr/bin/env python2

import sys
import socket

if __== "__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()

Sur 8178 caractères, vous obtiendrez un tel message: HTTP/1.1 414 Request-URI Too Large

2
Tom Lime