Почему URL-адреса файлов начинаются с 3-х слешей?

35316
Pacerier

HTTP начинается с двух слешей. Например http://example.com.

То же самое касается FTP. Например ftp://example.com.

Однако файл «URL» начинается с трех косых черт. Например, читая PDF-файл, используя Chrome, URL будет file:///D:/Desktop/Book.pdf.

Почему URL-адреса файлов используют три слеша?

175
Opera для Windows автоматически расширяет его до `file: // localhost / D: / Desktop /`. 12 лет назад 4
Также см. Http://stackoverflow.com/q/22772897/632951 Pacerier 9 лет назад 0

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

247
Dennis

Полный синтаксис есть file://host/path.

Если хост есть localhost, его можно опустить, что приведет к file:///path.

См. RFC 1738 - Унифицированные указатели ресурсов (URL) :

URL файла принимает форму:

file://<host>/<path> 

[...]

В качестве особого случая <host>может быть строка «localhost» или пустая строка; это интерпретируется как «машина, с которой интерпретируется URL».

Круто, я не ожидал, что ответ на этот вопрос будет стандартом RFC! Pacerier 13 лет назад 3
@Pacerier Почти все, что связано с Интернетом, можно объяснить RFC (обратите внимание, что они не обязательно являются «стандартами», но могут быть приняты как таковые). slhck 13 лет назад 33
@slhck, спасибо за информацию =) Кстати, я довольно долго об этом думал, но что с изображением @ http://qweop.com/x3? Pacerier 13 лет назад 2
Возможно, кто-то должен написать в блоге об этом, объясняя, как этот материал работает более подробно? Ivo Flipse 13 лет назад 2
Это довольно популярный ответ для тех, кто только 15 дней в своей карьере SU. Молодец Деннис и добро пожаловать на борт. music2myear 13 лет назад 1
Обратите внимание, что Тим Бернерс Ли принес извинения за те две косые черты, которые есть в каждом URL: http://news.bbc.co.uk/2/hi/technology/8306631.stm Peter 13 лет назад 4
Могу ли я опустить `localhost` из других протоколов или он работает только для` file: // `? Agos 13 лет назад 7
Обратите внимание, что Firefox на самом деле не следует этому стандартному `file: // test / C: \` будет вести себя так же, как `file: /// C: \`, а `http: /// test` выдаст неверный URL ошибка Earlz 13 лет назад 3
Должен любить RFC. Я не понимаю, почему TBL должен извиниться за два удара. Я думаю, что они довольно крутые. Cris Stringfellow 11 лет назад 0
Возможно ли использовать имена хостов, отличные от localhost? Это эквивалентно доступу к другому хосту в локальной сети? В какой ситуации люди когда-либо использовали хосты, отличные от localhost? CMCDragonkai 9 лет назад 0
А как насчет файла (/Users/john/filename.crt), расположенного в локальной Mac OS, это будет `file: /// Users / john / filename.crt` ?? Learner 6 лет назад 0
25
Molomby

Деннис объяснил третью косую черту, необходимую для отделения hostот path, но две другие гораздо интереснее ...

Оказывается, они были бесполезным и несколько произвольным дополнением к синтаксису URL. Тим Бернерс-Ли, изобретатель Всемирной паутины и автор многих ее стандартов (включая RFC, с которым связался Деннис), выразил сожаление по поводу использования «двойного слеша» в интервью в 2009 году.

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

http://bits.blogs.nytimes.com/2009/10/12/the-webs-inventor-regrets-one-small-thing/

Таким образом, если не считать незначительного (и нехарактерного) упущения в предвидении около 18 лет назад, URL вашего файла мог бы легко быть file:/D:/Desktop/Book.pdf, а не file:///D:/Desktop/Book.pdf.

Существует, чтобы ответить на ваш вопрос, нет веской причины, почему URL-адреса имеют 3 слеша.

TimBL также подробно останавливается на этом в своем [FAQ] (http://www.w3.org/People/Berners-Lee/FAQ.html#etc) Molomby 12 лет назад 2
Не говоря уже о том, что 2 байта можно сохранить, просто используя `http: example.com` вместо` http: // example.com`. Может показаться, что это немного, но они складываются. Google получает _миллионы_ поисковых запросов в день. Сколько ссылок на странице? По крайней мере, 20. Это означает, что для миллиона поисков, если бы косые черты не были нужны, можно было бы сэкономить 20 МБ полосы пропускания. Cole Johnson 10 лет назад 2
@ColeJohnson - Знаете ли вы, что вы можете также пропустить часть протокола? Таким образом, `http: // example.com` может быть связан как` // example.com` в документе, передаваемом по http. Он называется [относительный URL протокола] (http://billpatrianakos.me/blog/2013/04/18/protocol-relative-urls/), все браузеры поддерживают его. Molomby 10 лет назад 1
Я хорошо знаю об этом, но лично я использую их только в CSS. При написании HTML я также использую протокол. На самом деле никакой реальной причины. За исключением, может быть, потому что, когда несколько лет назад HTML5 + CSS3 впервые стал «большим», почти все сайты, на которые я смотрел, были такими. Cole Johnson 10 лет назад 0
@Molomby, он говорит о всех потерянных байтах, когда люди не делают относительные URL протокола. Который как> 99% населения. Pacerier 9 лет назад 0
@ColeJohnson, то есть вы рекомендуете `h: example.com` вместо` http: example.com`? Pacerier 9 лет назад 0
@Pacerier, в то время как это сэкономило бы еще больше байтов, я бы не рекомендовал это. Одиночный `h` не совсем понятен, что он означает в отличие от` http` (что ясно). Также, например, возьмем `ftp` и` file`. Если мы воспользуемся вашей идеей использовать только первую букву аббревиатуры, они оба будут `f`. Конечно, материал после протокола уберет неоднозначность (это путь к файлу веб-пути), но это будет излишне сложно Cole Johnson 9 лет назад 0
9
Beejor

As others have mentioned, the file schema is in the form "file://<host>/<path>". Though most browsers won't have a problem with only two slashes, and rightfully so.

All things being equal, the triple slash and "localhost" keyword only exist to ensure conformance with valid URI/URL syntax. In the context of the file schema, the host is meaningless since it loads directly from a filesystem without any explicit transfer protocol or server document path. Because it's not HTTP, it can't load from a standard web server where in theory you could have multiple local virtual hosts set up. And it can't load from a standard network volume that's technically another "host", since the browser just uses the volume name like "file:///volumes/foo". Finally, trying things like "file://example.com/some/file" doesn't work. There's probably some reason for supporting an external host, but I can't think of any.

The IETF is currently drafting changes to remove the triple-slash requirement, though the draft also adds a few oddball possibilities like file:c|/path and even file://///host.example.com/path.

https://tools.ietf.org/html/draft-ietf-appsawg-file-scheme-03

"3. This specification neither defines nor forbids a mechanism for accessing non-local files."

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