В URL для чего // [закрыто]

39

Как правило, когда я вижу //, обычно следует какой-то префикс протокола, например http:или ftp:. Я никогда не видел его в другом месте. Например,

http://www.google.com/

типичный URL

Тем не менее, я обнаружил, что следующие два синтаксиса дают разные версии одного и того же сайта,

http://www.weather.com/

http://www.weather.com//

Я бы подумал, что //где-либо, кроме спецификации протокола, будет недействительным. К моему удивлению, я был неправ. Что такого в финале, //который дает другую версию того же сайта?

РЕДАКТИРОВАТЬ:

Кто-то на этом сайте наверняка заметил другую, потому что обе ссылки теперь попадают на одну и ту же страницу.

Чад Харрисон
источник
9
Если бы мне пришлось угадывать, все, что вы делаете, это просматриваете один и тот же сайт дважды, но тот, который имеет дополнительные / в конце, нарушает CSS или то, что дети в наши дни используют для форматирования своих сайтов. :)
Марк Аллен
webmasters.stackexchange.com может лучше подойти к этому вопросу.
Мехпер С. Палавузлар
1
@ MehperC.Palavuzlar Оглядываясь назад, да. Но во время вопроса я думал, что область действия была несколько шире, чем она есть.
Чад Харрисон
@MarkAllen Ну его интересно отметить , что использование ///или ////в конце URL привел тот же сайт , как /где // сделал результат чем - то другим.
Чад Харрисон
Между тем, двойная обратная косая черта (\\) обычно встречается в Windows Uniform Naming Convention, например,\\HostName[@Port]\SharedFolder\Resource
William C

Ответы:

67

Ведущий //является частью синтаксиса URL. Изобретатель всемирной паутины извинился за эту ошибку .

На самом деле, если вы думаете об этом, ему не нужен двойной слеш. Я мог бы спроектировать так, чтобы не было двойной косой черты. - сэр Тим Бернерс-Ли, изобретатель всемирной паутины


Что касается трейлинга //, это действительно не двойная косая черта. Первая косая черта отделяет имя хоста от пути. Последний слеш - это путь. Веб-сервер может, если он хочет, трактовать путь, /отличный от пустого пути, и, очевидно, с помощью Weather.com. Что касается того, случайно это или преднамеренно, вы должны спросить их об этом.

Дэвид Шварц
источник
Это завершает работу, поскольку вы можете настроить веб-сервер для поиска индекса, отличного от корневого веб-каталога! Моя шляпа тебе снята, сэр.
Чад Харрисон
Вы говорите, http://example.comможно относиться иначе http://example.com/? Я не думал, что это было в случае с первым ударом.
Рассерженная шлюха
1
@DisgruntledGoat Да, вы можете использовать некоторые .htaccessправила. Но вы, вероятно, не должны.
Мэтью
1
Вы не можете рассматривать http://example.comотличные от http://example.com/веб-сервера, так как они оба имеют пустой путь. Вы можете относиться к ним по-разному в браузере.
Дэвид Шварц
3
не обращаяGET / HTTP/1.1
внимания
19

Совсем недавно можно утверждать, что двойная косая черта играет определенную роль. Google рекомендует (например, чтобы избежать случайного вызова небезопасного содержимого с защищенной страницы), исключив протокол из встроенных ресурсов (таблиц стилей, js и т. Д.), Например так

<script src="//www.google.com/js/gweb/analytics/autotrack.js"></script>

Таким образом, теперь очевидно, что такой URL без протокола является полностью определенным URL, а не относительным URL (который начинается с одной косой черты).

DaveP
источник
1
Этот стиль называется «относительным протоколом» URL / URI. Есть похожие вопросы по SO.
hippietrail
1
Больше не рекомендую. Смотрите также paulirish.com/2010/the-protocol-relative-url
lorond
13

На самом деле ответ на вопрос, оригинальный спецификация дал протокол http:(или , возможно ftp:, gopher:, mailto:, news:, telnet:, wais:, file:или prospero:) , то , // чтобы указать , что Uniform Resource Locator (URL) синтаксис использовался, то хозяин (возможно с префиксом user:password@) , то адрес Правильно начинать с другого /. Это было предложено в RFC 1738 .

По мере развития Интернета он http:стал доминирующим протоколом, поэтому браузеры теперь предполагают, что префикс http://должен быть добавлен, если его там нет.

StarNamer
источник
3
Ваш ответ, по-видимому, указывает на то, что в какой-то момент с протоколом могло быть использовано что-то иное, чем URL, и использовалось бы что-то иное, чем //для указания того, что он используется ... Это так?
Изката
3
@Izkata В конце 80-х и 90-х, когда начинал работать Интернет, было несколько разных форматов, предлагаемых для различных предметов. URL были / являются подмножеством URN (см. RFC 3305), и они могут иметь различные форматы, например isbn:1-23-456789-12-3. На практике http:определяется, что остальное будет URL. RFC являются просто предложениями и часто допускают расширения, которые никогда не осуществляются. В какой-то момент Тим ​​Бернерс-Ли сказал, что //это «подсеть» (например http:/govnet/whitehouse.gov). Эта идея никогда не использовалась, но «//» остается, так как теперь много кода ожидает и проверяет его.
StarNamer
1
@Izkata: вы, вероятно, не увидите URN без URL, используемый с протоколом связи; это то, для чего // Это указывает на то, что протокол используется для доступа к (возможно, удаленному) сетевому местоположению, где должен быть найден ресурс. Там являются многими других URN , у которых есть другие части данных и не использует // (ваш браузер , вероятно , признает «электронная почта:», например). Смотрите: en.wikipedia.org/wiki/URI_scheme
KutuluMike
@MichaelEdenfield Ну, вот что мне интересно сейчас. Была ли когда-нибудь точка, в которой это было предназначено для использования по-другому - что-то другое, что могло бы общаться через один и тот же протокол. В качестве грубого примера, могло ли желание когда-то быть и для того, http://www.google.com/и http:%/74.125.225.97/для того, чтобы быть действительным, и //указывать имя хоста, в то время как что-то еще %/указывает на IP-адрес?
Изката
1
Я так не думаю. По крайней мере, я никогда не видел никаких проектов документов / примеров / и т.д., которые имеют альтернативную схему иерархии для URL. У меня всегда было впечатление, что TBL просто хотел что-то сделать, чтобы было очевидно, что URL указывает на реальный ресурс (а не на произвольные данные), а использование // делает вещи достаточно похожими на файлы. Любой другой стиль URN, который я когда-либо видел, не имеет специального префикса в своей части данных. Некоторые протоколы позволяют это (я думаю , например, telnet и gopher), но я никогда не видел ничего подобного для http (s).
KutuluMike
1

Я хотел бы добавить к принятому ответу Дэвида:

Несмотря на извинения изобретателя сети, я думаю, что синтаксис двойной косой черты служил важной цели: визуально выделиться. Двойная косая черта позволяла легко визуально различать URL-адреса в тексте без гиперссылок. Когда вы увидели двойную косую черту, вы сразу же подумали, что ее можно ввести в окне браузера, подобно тому, как вы думали, текст, содержащий@может быть использован для отправки электронной почты. Это было особенно важно на этапе перехода к вебу, где у протоколов той эпохи (ftp, telnet, gopher) было свое странное представление об адресах серверов или путях к ресурсам, реже обоим. Большинство проблем, связанных с двойной косой чертой, все еще будут существовать, потому что двойная косая черта является наименее загадочной частью URL-адреса, учитывая номера портов, процентное кодирование и чувствительность к регистру. Но наличие такого URL-адреса, как http :thing.com, можно легко спутать с моим примером здесь :thing.com. Посмотрите на http: // с другой стороны, как он сияет, как бриллиант. Двойная косая черта была важной частью веб-символики, и я считаю, что она также ускорила процесс принятия, даже если это было непреднамеренно.

Они также могли бы облегчить работу AmigaOS по различению имен файлов и URL-адресов, поскольку AmigaOS использовал синтаксис пути к файлу volume:path/to/destination. :)

Седат Капаноглу
источник