Почему нет ошибки при вводе множества косых черт в URL файла в браузере?

417
skomisa

На моем компьютере с Windows 10 я могу ввести URL файла локального каталога (например file:///D:/temp) или локального файла (например file:///D:/temp/homepage.html), и все работает нормально.

Тем не менее, там, где в этих действительных URL есть косая черта, я могу вставить еще много, и все по-прежнему работает нормально. Например:

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

Также смотрите скриншот из Chrome:

Сначала я подумал, что это ошибка в Chrome, но Opera, Edge и Firefox также делают то же самое, поэтому я предполагаю, что URL-адрес вполне допустим.

В качестве связанной с этим проблемы стоит отметить, что эти браузеры также допускают несколько косых черт в веб-URL (например https:///////////////////www.amazon.com), хотя в этом случае URL-адрес в адресной строке исправляется https://www.amazon.com. Так что это не просто URL-адреса файлов, которые допускают много косых черт.

Есть ли веская причина, по которой браузеры разрешают все эти косые черты, или это упущение в некоторых спецификациях, которые нельзя исправить?

1

1 ответ на вопрос

3
mtak

В RFC3986, раздел 3.3 говорится, что в URL допустимы множественные слэши.

/В URL определяет, где сегменты URL разделены. Двойная косая черта (за пределами разделителя полномочий, который является первым //) приведет к пустому сегменту, который в соответствии с RFC 2396 можно игнорировать. Технически веб-сервер может выдать исключение, но пользователи ожидают, что веб-серверы будут обрабатывать подобные вещи, поэтому он просто игнорирует это.

Кстати, это также происходит в Unices (которые, вероятно, были смоделированы в сети):

Раздел 3.266 спецификации Single Unix определяет, что несколько слэшей можно рассматривать как один:

Строка символов, используемая для идентификации файла. В контексте стандарта IEEE Std 1003.1-2001 имя пути состоит не более чем из байтов, включая завершающий нулевой байт. Он имеет необязательный начальный слеш, за которым следуют ноль или более имен файлов, разделенных косыми чертами. Имя пути может содержать один или несколько завершающих слэшей. Несколько последовательных слешей считаются такими же, как один слеш.

Спасибо за эти ссылки. RFC2396 был заменен RFC3986, но раздел 3.3 этого документа («Путь») подтверждает, что допустимы множественные слэши. skomisa 6 лет назад 0
Спасибо за исправление. Я обновил свой ответ. mtak 6 лет назад 0
Где RFC 3986 говорит, что это «может быть проигнорировано»? Я не нашел его в разделе 3.3. unor 6 лет назад 0
@unor При ближайшем рассмотрении RFC3986 3.3 на самом деле ничего не говорит о множественных косых чертах в пути. Тем не менее, определение «путь-абсолют» в приложении. A (Собран ABNF для URI) и образец регулярного выражения в приложении. B (парсинг ссылки на URI с помощью регулярного выражения), оба допускают множественные слэши. skomisa 6 лет назад 0
@skomisa: Да, множественные `/` разрешены без сомнения, но так же, как множественные `a`, множественные` 2` и т. д. - все они меняют значение URL, если в спецификации не указано иное. Таким образом, вопрос в том, почему URL-адреса файлов все равно работают - я предполагаю (но не более того), что ОС решает, то есть, как работают файлы-патчи (например, как описано в цитате mtak из спецификации Unix). (Почему HTTP-URL с несколькими слэшами работают по-другому: это зависит от сервера, т. Е. Некоторые заставляют эти URL-адреса указывать на один и тот же ресурс, некоторые перенаправляют на каноническую форму, другие дают ошибки и т. Д.) unor 6 лет назад 0