Kurze Antwort - faktische Grenze von 2000 Zeichen
Wenn Sie URLs unter 2000 Zeichen halten, funktionieren sie in praktisch jeder Kombination von Client- und Server-Software.
Wenn Sie bestimmte Browser im Visier haben, finden Sie unten weitere Details zu spezifischen Grenzen.
Längere Antwort - zuerst die Standards...
RFC 2616 (Hypertext Transfer Protocol HTTP/1.1) Abschnitt 3.2.1 sagt
Das HTTP-Protokoll setzt keine a priori Grenze für die Länge einer URI. Server MÜSSEN in der Lage sein, die URI jeder Ressource zu verarbeiten, die sie bedienen, und SOLLTEN URIs beliebiger Länge verarbeiten können, wenn sie GET-basierte Formulare bereitstellen, die solche URIs generieren könnten. Ein Server SOLLTE den Status 414 (Request-URI Too Long) zurückgeben, wenn eine URI länger ist, als der Server verarbeiten kann (siehe Abschnitt 10.4.15).
Dieses RFC wurde durch RFC7230 ersetzt, das eine Aktualisierung der HTTP/1.1-Spezifikation ist. Es enthält eine ähnliche Sprache, schlägt jedoch auch Folgendes vor:
Es sind verschiedene ad hoc-Limitierungen zur Anforderungslinienlänge in der Praxis zu finden. Es wird EMPFOHLEN, dass alle HTTP-Sender und Empfänger mindestens Anforderungslinienlängen von 8000 Oktetten unterstützen.
...und die Realität
Das sind die Aussagen der Standards. Zur Realität gab es einen Artikel auf boutell.com (der Link führt zum Internet Archive-Backup), der diskutierte, was individuelle Browser- und Serverimplementierungen unterstützen. Die Zusammenfassung lautet:
Extrem lange URLs sind normalerweise ein Fehler. URLs über 2.000 Zeichen funktionieren nicht in den beliebtesten Webbrowsern. Verwenden Sie sie nicht, wenn Sie möchten, dass Ihre Website für die Mehrheit der Internetbenutzer funktioniert.
(Anmerkung: Dies ist ein Zitat aus einem Artikel von 2006, aber 2015 bedeutet der sinkende Einsatz von IE, dass längere URLs tatsächlich für die Mehrheit funktionieren. Allerdings hat IE immer noch die Beschränkung...)
Internet Explorers Beschränkungen...
IE8 hat eine maximale URL-Länge von 2083 Zeichen, und es scheint, dass IE9 eine ähnliche Grenze hat.
Ich habe IE10 getestet und die Adressleiste akzeptiert nur 2083 Zeichen. Sie können auf eine URL klicken, die länger ist als dies, aber die Adressleiste zeigt immer noch nur 2083 Zeichen dieses Links an.
Es gibt einen interessanten Artikel im IE Internals-Blog, der einige Hintergrundinformationen dazu liefert.
Es gibt gemischte Berichte darüber, ob IE11 längere URLs unterstützt - siehe Kommentare unten. Da einige Leute Probleme melden, gilt die allgemeine Empfehlung weiterhin.
Suchmaschinen mögen URLs < 2048 Zeichen...
Beachten Sie, dass das Sitemaps-Protokoll, das es einer Website ermöglicht, Suchmaschinen über verfügbare Seiten zu informieren, eine Grenze von 2048 Zeichen in einer URL hat. Wenn Sie Sitemaps verwenden möchten, wurde für Sie eine Grenze festgelegt! (siehe Antwort von Calin-Andrei Burloiu unten)
Es gibt auch einige Untersuchungen aus dem Jahr 2010 zur maximale Länge einer URL, die von Suchmaschinen gecrawlt und indexiert wird. Sie fanden heraus, dass die Grenze bei 2047 Zeichen lag, was anscheinend mit der Spezifikation des Sitemap-Protokolls übereinstimmt. Sie fanden jedoch auch heraus, dass das Google SERP-Tool mit URLs über 1855 Zeichen nicht umgehen konnte.
CDNs haben Grenzen
CDNs legen auch Grenzen für die URI-Länge fest und geben eine 414 Too long request
zurück, wenn diese Grenzen erreicht werden, zum Beispiel:
(Dank an timrs2998 für die Bereitstellung dieser Informationen in den Kommentaren)
Zusätzliche Browserübersicht
Ich habe die folgenden gegen einen mit sehr großen LimitRequestLine und LimitRequestFieldSize konfigurierten Apache 2.4-Server getestet.
Browser Adressleiste document.location
oder Anker-Tag
------------------------------------------
Chrome 32779 >64k
Android 8192 >64k
Firefox >64k >64k
Safari >64k >64k
IE11 2047 5120
Edge 16 2047 10240
Siehe auch diese Antwort von Matas Vaitkevicius unten.
Ist diese Information auf dem neuesten Stand?
Dies ist eine häufig gestellte Frage, und da die ursprüngliche Forschung etwa 14 Jahre alt ist, werde ich versuchen, sie auf dem neuesten Stand zu halten: Stand Jan 2021 gilt die Empfehlung nach wie vor. Auch wenn IE11 möglicherweise längere URLs akzeptiert, die Verbreitung älterer IE-Installationen und die Beschränkungen von Suchmaschinen bedeuten, dass es am besten ist, sich unter 2000 Zeichen zu halten. Dies ist die beste allgemeine Richtlinie.
47 Stimmen
FWIW, für Windows-Benutzer können Serverpfade, die 250 Zeichen überschreiten möglicherweise Probleme verursachen, wenn URLs erstellt werden, siehe z.B. HttpContext.Current.Server.MapPath fails for long file names auf forums.asp.net. Das Fazit: Wenn eine Einschränkung Sie nicht aufhält, könnte eine andere das tun.
0 Stimmen
@gerryLowry: Windows-Tools haben bereits Probleme beim Kompilieren mit langen Dateinamen, daher ist dies normalerweise kein Problem, wenn Sie
MapPath
nur für tatsächliche Dateinamen verwenden. Man hofft, dass die extra langen URL-Namen nicht mit extra langen Dateipfaden gekoppelt sind, da letzteres zu einem unbrauchbaren Durcheinander führt, während Ersteres möglicherweise nur ein Entwickler ist, der GET-Anfragen missbraucht, wo er POST-Anfragen verwenden sollte.29 Stimmen
Aus support.microsoft.com/kb/208427 "Die maximale URL-Länge beträgt 2.083 Zeichen im Internet Explorer"
12 Stimmen
Darf ich fragen, warum du das wissen musstest? D.h. für welchen Anwendungsfall benötigst du eine lange URL?
1 Stimmen
Ähnliche ServerFault-Frage zu Tomcat: serverfault.com/questions/56691/…
0 Stimmen
Zugehörige ServerFault-Frage zu Jetty: serverfault.com/questions/136249/…
27 Stimmen
@Lohoris: Wenn ein Formular
get
anstelle vonpost
verwendet, wird das Lesezeichen auf die Seite festgehalten, die durch das ausgefüllte Formular erreicht wurde, die eingegebenen Informationen erfassen. In einigen Fällen kann das schlecht sein, aber in anderen Fällen kann es nützlich sein. Damit das funktioniert, muss der Browser jedoch in der Lage sein, eine URL mit allen Informationen zu verarbeiten.5 Stimmen
@Lohoris Wenn wir Seiten schreiben, um Berichte zu generieren, verwenden wir ein Kriterienformular. Es ist auf einigen Berichten nützlich, die URL per E-Mail an jemanden weiterzuleiten, wobei die Kriterien bereits enthalten sind. Je nach Bericht sind wir manchmal gezwungen,
post
zu verwenden, da die Kriterien sonst abgeschnitten werden. Nur ein weiteres Anwendungsbeispiel.1 Stimmen
Wenn Ihre Eingabe in URL-Parametern enthalten sein muss, möchten Sie dies möglicherweise so lang wie möglich haben. Tableau ermöglicht es Ihnen, Webseiten in Dashboards einzubetten und die URL dynamisch zu gestalten, basierend darauf, worauf der Benutzer klickt. Ich möchte möglicherweise 100 Seiten Text als URL-Parameter übergeben, um eine Stimmungsanalyse durchzuführen und dann ein Ergebnis zurückzugeben. Diese 100 Seiten Text würden sich je nachdem ändern, auf welches Buch der Benutzer klickt.
0 Stimmen
@o0'. Parameter. Insbesondere benutzerdefinierte.
0 Stimmen
@o0'. Ein gutes Beispiel für eine lange URL ist, wenn ich Clickatell bitte, eine Nachricht zu senden. Ich muss die Nachricht selbst im URL-Format (z. B. Leerzeichen als %20) sowie die anderen Parameter angeben.
0 Stimmen
Es lohnt sich zu beachten, dass nicht alle HTTP-Anfragen an einen Webserver über einen Webbrowser erfolgen, sodass Sie an Grenzen der Socket-API oder der Webserverbeschränkungen stoßen können, dass auch nicht alle URL-Änderungen eine HTTP-Anfrage auslösen (z. B. Verlaufspush oder Hash-Änderung). Was passiert also wirklich, wenn Sie 100k Zeichen an
window.location.href
anhängen und es dann im JS-Engine als Wert verwenden? Das letzte Mal, als ich etwas Ähnliches gemacht habe, erhielt ich viel weniger Zeichen imhref
-Eigenschaft, die angehängt werden sollten (jetzt spreche ich über Chrome).