Warum gibt es keinen Fehler, wenn ich in einem Browser viele Schrägstriche in eine Datei-URL eingebe?

513
skomisa

Auf meinem Windows 10-Computer kann ich eine Datei-URL eines lokalen Verzeichnisses (z. B. file:///D:/temp) oder eine lokale Datei (z. B. ) eingeben, file:///D:/temp/homepage.htmlund alles funktioniert einwandfrei.

Überall dort, wo in diesen gültigen URLs ein Schrägstrich steht, kann ich noch viele weitere einfügen, und alles funktioniert weiterhin einwandfrei. Zum Beispiel:

file:///D://///////////////////temp///////////////MiscTests/////// 

Siehe auch den Screenshot von Chrome:

Zuerst dachte ich, dies sei ein Fehler in Chrome, aber Opera, Edge und Firefox machen dasselbe, also gehe ich davon aus, dass die URL vollkommen gültig ist.

Als verwandtes Problem sollte beachtet werden, dass diese Browser auch mehrere Schrägstriche in einer Web-URL zulassen (z. B. https:///////////////////www.amazon.com), obwohl in diesem Szenario die URL in der Adressleiste korrigiert wird https://www.amazon.com. Es sind also nicht nur Datei-URLs, die viele Schrägstriche zulassen.

Gibt es einen guten Grund dafür, dass die Browser all diese Schrägstriche zulassen, oder handelt es sich um ein Versehen in einer Spezifikation, die nicht korrigiert werden kann?

1

1 Antwort auf die Frage

3
mtak

RFC3986, Abschnitt 3.3 besagt, dass in URLs mehrere Schrägstriche gültig sind.

Die /in einer URL legt fest, wo Segmente der URL aufgeteilt werden. Ein doppelter Schrägstrich (außerhalb des Autoritätsbegrenzers, der der erste ist //) würde ein leeres Segment ergeben, das gemäß RFC 2396 ignoriert werden kann. Technisch gesehen kann ein Webserver eine Ausnahme auslösen, aber Benutzer erwarten, dass Webserver diese Art von Dingen verarbeiten, also ignoriert sie dies einfach.

Übrigens, das passiert auch auf Unices (denen das Web wohl nachgebildet wurde):

Der Abschnitt 3.266 der Single Unix-Spezifikation definiert, dass mehrere Schrägstriche als einer betrachtet werden können:

Eine Zeichenfolge, mit der eine Datei identifiziert wird. Im Zusammenhang mit IEEE Std 1003.1-2001 besteht ein Pfadname aus höchstens Bytes, einschließlich des abschließenden Nullbytes. Es hat einen optionalen Schrägstrich, gefolgt von null oder mehr Dateinamen, die durch Schrägstriche getrennt sind. Ein Pfadname kann optional einen oder mehrere nachstehende Schrägstriche enthalten. Mehrere aufeinanderfolgende Schrägstriche gelten als ein Schrägstrich.

Danke für diese Hinweise. RFC2396 wurde durch RFC3986 ersetzt, aber Abschnitt 3.3 dieses Dokuments ("Path") bestätigt, dass mehrere Schrägstriche gültig sind. skomisa vor 6 Jahren 0
Danke für die Korrektur. Ich habe meine Antwort aktualisiert. mtak vor 6 Jahren 0
Wo sagt RFC 3986, dass es "möglicherweise ignoriert" wird? Ich habe es in Abschnitt 3.3 nicht gefunden. unor vor 6 Jahren 0
@unor Bei näherer Betrachtung sagt RFC3986 3.3 eigentlich nichts über mehrere Schrägstriche im Pfad. Die Definition von "Pfad absolut" in App. A (Collected ABNF for URI) und der Beispielregex in App. B (Parsing einer URI-Referenz mit einem regulären Ausdruck) ermöglichen beide Schrägstriche. skomisa vor 6 Jahren 0
@skomisa: Ja, mehrere "/" sind ohne Zweifel zulässig, aber auch mehrere "a", mehrere "2" usw. - sie ändern alle die Bedeutung der URL, sofern in der Spezifikation nicht das Gegenteil angegeben ist. Die Frage ist also, warum Datei-URLs trotzdem funktionieren. Meine Vermutung (aber nicht mehr) ist, dass das Betriebssystem entscheidet, dh wie die Dateipfade funktionieren (wie z. B. in mtaks Zitat aus der Unix-Spezifikation beschrieben). (Warum HTTP-URLs mit mehreren Schrägstrichen funktionieren, ist eine andere Angelegenheit: Dies hängt vom Server ab, dh einige lassen diese URLs auf dieselbe Ressource verweisen, einige leiten auf eine kanonische Form um, einige geben Fehler usw.). unor vor 6 Jahren 0