Wie groß ist die maximale Länge einer Abfragezeichenfolge?

Ist es Browser abhängig? Haben verschiedene Web-Stacks unterschiedliche Grenzen für die Anzahl der Daten, die sie aus der Anfrage erhalten können?

RFC 2616 (Hypertext Transfer Protocol – HTTP / 1.1) gibt an, dass die Länge einer Abfragezeichenfolge nicht begrenzt ist (Abschnitt 3.2.1). RFC 3986 gibt auch an, dass es keine Begrenzung gibt, gibt aber an, dass der Hostname aufgrund von DNS-Beschränkungen auf 255 Zeichen begrenzt ist (Abschnitt 2.3.3).

Während die Spezifikationen keine maximale Länge spezifizieren, werden praktische Beschränkungen durch den Webbrowser und die Serversoftware auferlegt. Basierend auf den bei Boutell.com gefundenen Untersuchungen :

  • Microsoft Internet Explorer (Browser)
    Microsoft gibt an, dass die maximale Länge einer URL in Internet Explorer 2.083 Zeichen beträgt, mit nicht mehr als 2.048 Zeichen im Pfadabschnitt der URL. Versuche, längere URLs zu verwenden, führten zu einer deutlichen Fehlermeldung im Internet Explorer.

  • Microsoft Edge (Browser)
    Das Limit scheint um 81578 Zeichen zu liegen. Siehe URL-Längenbeschränkung von Microsoft Edge

  • Chrom
    Die URL wird nach 64.000 Zeichen nicht mehr angezeigt, kann jedoch mehr als 100.000 Zeichen lang sein. Darüber hinaus wurden keine weiteren Tests durchgeführt.

  • Firefox (Browser)
    Nach 65.536 Zeichen zeigt die Adressleiste die URL in Windows Firefox 1.5.x nicht mehr an. Längere URLs funktionieren jedoch. Nach 100.000 Zeichen wurden keine weiteren Tests durchgeführt.

  • Safari (Browser)
    Mindestens 80.000 Zeichen werden funktionieren. Testing wurde darüber hinaus nicht versucht.

  • Opera (Browser)
    Mindestens 190.000 Zeichen werden funktionieren. Test nach 190.000 Zeichen beendet Opera 9 für Windows zeigte weiterhin eine vollständig bearbeitbare, kopierbare und einfügbare URL in der Adressleiste an, sogar mit 190.000 Zeichen.

  • Apache (Server)
    Frühe Versuche, die maximale URL-Länge in Webbrowsern zu messen, stießen auf eine Server-URL-Längenbeschränkung von ungefähr 4.000 Zeichen, nach der Apache einen “413 Entity Too Large” -Fehler erzeugt. Der aktuelle Apache-Build von Red Hat Enterprise Linux 4 wurde verwendet. Die offizielle Apache-Dokumentation erwähnt nur ein 8.192-Byte-Limit für ein einzelnes Feld in einer Anfrage.

  • Microsoft Internet Information Server (Server)
    Das Standardlimit beträgt 16.384 Zeichen (ja, der Webserver von Microsoft akzeptiert längere URLs als der Webbrowser von Microsoft). Dies ist konfigurierbar.

  • Perl HTTP :: Daemon (Server)
    Bis zu 8.000 Bytes werden funktionieren. Diejenigen, die Webanwendungsserver mit dem Perl :: HTTP :: Daemon-Modul erstellen, werden auf die kombinierte Größe aller HTTP-Anforderungsheader auf 16.384 Byte begrenzt. Dies beinhaltet keine POST-Formulardaten, Datei-Uploads usw., aber es beinhaltet die URL. In der Praxis führte dies zu einem 413-Fehler, wenn eine URL wesentlich länger als 8.000 Zeichen war. Diese Einschränkung kann leicht entfernt werden. Suchen Sie nach allen Vorkommen von 16×1024 in Daemon.pm und ersetzen Sie sie durch einen größeren Wert. Natürlich erhöht dies Ihre Exposition gegenüber Denial-of-Service-Angriffen.

Ich nehme an, du meinst maximale Länge für eine uri-Zeichenfolge. Dies kann helfen.

In der Regel, sobald URIs unlesbar werden, weil sie zu lang sind, ist es Zeit, stattdessen eine POST-Anfrage zu verwenden.

Verschiedene Webstapel unterstützen unterschiedliche Längen von http-Anfragen. Ich weiß aus Erfahrung, dass die frühen Stacks von Safari nur 4000 Zeichen unterstützt haben und daher aufgrund des USER-STATEs Schwierigkeiten beim Umgang mit ASP.net-Seiten hatten. Dies gilt sogar für den POST, also müssten Sie den Browser überprüfen und sehen, was das Stack-Limit ist. Ich denke, dass Sie sogar in neueren Browsern ein Limit erreichen können. Ich kann mich nicht erinnern, aber einer von ihnen (IE6, glaube ich) hatte ein Limit von 16 Bit, 32.768 oder so.

Obwohl es offiziell keine Begrenzung gibt, geben viele Sicherheitskonfigurationsempfehlungen an, dass maxQueryStrings auf einem Server auf ein maximales Zeichenlimit von 1024 festgelegt werden sollte, während die gesamte URL einschließlich der Abfragezeichenfolge auf maximal 2048 Zeichen festgelegt werden sollte. Dies soll verhindern, dass die Schwach HTTP-Anfrage auf einem Webserver langsame DDOS-Angriffe verhindert.