В URL для чего //

13851
Chad Harrison

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

http://www.google.com/

это типичный URL

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

http://www.weather.com/

http://www.weather.com//

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

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

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

38
Если бы мне пришлось угадывать, все, что вы делаете, это просматриваете один и тот же сайт дважды, но тот, который имеет дополнительные / в конце, нарушает CSS или то, что дети в наши дни используют для форматирования своих сайтов. :) Mark Allen 12 лет назад 9
http://webmasters.stackexchange.com/ может быть лучше подходит для этого вопроса. Mehper C. Palavuzlar 12 лет назад 0
@ MehperC.Palavuzlar Оглядываясь назад, да. Но во время вопроса я думал, что область действия была несколько шире, чем она есть. Chad Harrison 12 лет назад 1
@MarkAllen Интересно отметить, что использование `///` или `////` в конце URL привело к тому же сайту, что и `/`, где `//` * did * привело к чему-то другому. Chad Harrison 12 лет назад 0
Между тем, двойная обратная косая черта (\\\) обычно встречается в Windows Uniform Naming Convention, например, \\ HostName [@Port] \ SharedFolder \ Resource` William C 12 лет назад 0

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

63
David Schwartz

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

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


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

Это завершено, поскольку вы можете * настроить * веб-сервер для поиска индекса, отличного от корневого веб-каталога! Моя шляпа тебе снята, сэр. Chad Harrison 12 лет назад 0
Вы хотите сказать, что `http: // example.com` может трактоваться иначе, чем` http: // example.com / `? Я не думал, что это было в случае с первым ударом. DisgruntledGoat 12 лет назад 0
@DisgruntledGoat Вы можете *, да *, используя некоторые правила `.htaccess`. Но вы, вероятно, не должны. Matthew 12 лет назад 1
@Matt это странно, потому что, когда вы вводите косую черту после домена, браузер мгновенно удаляет его [править: Chrome / Firefox удаляет его, IE фактически * добавляет * его], подразумевая, что на самом деле браузер не может запрашивать каждый индивидуально. Также ссылка RFC в другом ответе ниже говорит, что косая черта необязательна, подразумевая, что они идентичны. DisgruntledGoat 12 лет назад 0
Вы не можете трактовать `http: // example.com` отличным от` http: // example.com / `на веб-сервере, поскольку у них обоих есть пустой путь. Вы можете относиться к ним по-разному в браузере. David Schwartz 12 лет назад 1
не обращая внимания на заголовок хоста, ноль или одна косая черта преобразуются в один и тот же запрос http: `GET / HTTP / 1.1`: http://tools.ietf.org/html/rfc2616.html#section-3.2.3 SingleNegationElimination 12 лет назад 3
17
DaveP

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

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

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

Этот стиль называется «относительным протоколом» URL / URI. Есть похожие вопросы по SO. hippietrail 12 лет назад 1
+1 Спасибо, я этого не знал и никогда бы не попробовал. Alberto 12 лет назад 0
Больше не рекомендую. Смотрите также https://www.paulirish.com/2010/the-protocol-relative-url/ lorond 8 лет назад 1
12
StarNamer

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

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

Ваш ответ, по-видимому, указывает на то, что в какой-то момент с протоколом могло быть использовано что-то, кроме URL, и использовало бы что-то иное, чем `//`, чтобы указать, что оно используется ... Это так? Izkata 12 лет назад 3
@Izkata В конце 80-х и 90-х, когда начинал работать интернет, было предложено несколько разных форматов для различных предметов. URL были / являются подмножеством URN (см. RFC 3305), и они могут иметь различные форматы, например, `isbn: 1-23-456789-12-3`. На практике, http: `определяет, что остальное будет URL. RFC являются просто предложениями и часто допускают расширения, которые никогда не материализуются. В какой-то момент Тим ​​Бернерс-Ли сказал, что «//» предназначено для «подсети» (например, «http: / govnet / whitehouse.gov`). Эта идея никогда не использовалась, но «//» остается, так как теперь много кода ожидает и проверяет его. StarNamer 12 лет назад 2
@Izkata: вы, вероятно, не увидите URN без URL, используемый с протоколом связи; вот для чего //. Это указывает на то, что протокол используется для доступа к (возможно, удаленному) сетевому местоположению, где должен быть найден ресурс. Есть * множество * других URN, которые имеют другие части данных и не используют // (ваш браузер, вероятно, распознает «mailto:», например). Смотрите: http://en.wikipedia.org/wiki/URI_scheme KutuluMike 12 лет назад 1
@MichaelEdenfield Well, that's what I'm wondering now. Was there ever a point where it was _intended_ to be used differently - something different that could communicate through the same protocol. As a crude example, could the intention _at one time_ have been for `http://www.google.com/` and `http:%/74.125.225.97/` to both be valid, and `//` indicate a hostname while something else like `%/` indicate an IP address? Izkata 12 лет назад 0
Я так не думаю. По крайней мере, я никогда не видел никаких проектов документов / примеров / и т. Д., Которые имеют альтернативную схему иерархии для URL. У меня всегда складывалось впечатление, что TBL просто хотел что-то сделать, чтобы было очевидно, что URL указывает на фактический * ресурс * (а не на произвольные данные), а использование // делает вещи достаточно похожими на файлы. Каждый другой стиль URN, который я когда-либо видел, имеет * нет * специального префикса в своей части данных. Некоторые протоколы позволяют это (я думаю, например, telnet и gopher), но я никогда не видел ничего подобного для http (s). KutuluMike 12 лет назад 1
0
Sedat Kapanoglu

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

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

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

Похожие вопросы