Чому URL-адреси файлів починаються з 3-х нахилів?


182

HTTP починається з двох нахилів. Напр http://example.com.

Те саме стосується і FTP. Напр ftp://example.com.

Однак файл "URL-адреси" починається з трьох нахилів. Наприклад, читаючи pdf-файл за допомогою хрому, URL-адреса була б file:///D:/Desktop/Book.pdf.

Чому URL-адреси файлів використовують три косої риски?


5
Opera для Windows розширює його file://localhost/D:/Desktop/автоматично.

Відповіді:


14

Як уже згадували інші, схема файлу складається у формі "файл: // <host> / <path>". Хоча більшість браузерів не матиме проблеми лише з двома нахилами, і це правильно.

За рівних умов, потрійне нахилене срібло та ключове слово "localhost" існують лише для того, щоб забезпечити відповідність дійсному синтаксису URI / URL. У контексті файлової схеми хост є безглуздим, оскільки він завантажується безпосередньо з файлової системи без явного протоколу передачі або шляху документа до сервера. Оскільки це не HTTP, він не може завантажуватися зі стандартного веб-сервера, де теоретично у вас може бути встановлено кілька локальних віртуальних хостів. І він не може завантажуватись із стандартного мережевого тома, який технічно є іншим "хостом", оскільки браузер просто використовує назву тома типу "файл: /// volumes / foo". Нарешті, спробувати такі речі, як "файл: //example.com/some/file", не працює. Напевно, є якась причина для підтримки зовнішнього хоста, але я не можу придумати жодної.

В даний час IETF розробляє зміни для усунення вимоги з потрійною косою рисою, хоча проект також додає декілька варіантів дивної кулі, як file:c|/pathі навіть file://///host.example.com/path.

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

"3. Ця специфікація не визначає і не забороняє механізм доступу до нелокальних файлів."


1
Проект став RFC 8089 у 2017 році, який все ще включає вашу пропозицію.
ComFreek

252

Повний синтаксис є file://host/path.

Якщо хост є localhost, його можна опустити, в результаті чого file:///path.

Див. RFC 1738 - Уніфіковані локатори ресурсів (URL) :

URL-адреса файлу має форму:

file://<host>/<path>

[…]

Як окремий випадок, <host>може бути рядок "localhost" або порожній рядок; це трактується як "машина, з якої інтерпретується URL".


3
Класно, я не очікував відповіді на це запитання стандартом RFC!
Pacerier

33
@Pacerier Практично все, що стосується Інтернету, можна пояснити RFC (зауважте, що вони не обов'язково є "стандартами", але можуть бути прийняті як такі).
slhck

5
Зауважте, що Тім Бернерс Лі вибачився за ті 2 косої риски, які є в кожній URL-адресі: news.bbc.co.uk/2/hi/technology/8306631.stm
Пітер

7
Чи можу я пропустити й localhostінші протоколи або це працює лише для file://?
Agos

3
Зауважте, що Firefox насправді не дотримується цього стандартного `файла: // test / C: \` поводитиметься так само, як `файл: /// C: \`, а `http: /// test 'дасть недійсну URL-адресу помилка
Earlz

27

Денніс пояснив третій ривок, необхідний для відділення 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 косої риски.


Оновлення: Як в коментарях зазначає @ComFreek, станом на 2017 рік, file:/D:/...приклад, наведений вище, тепер дійсний! Це завдяки RFC 8089 , який конкретно викликує це виправлення з попереднього стандарту ...

Згідно з визначенням у [RFC1738], URL-адреса файлу завжди починалася з маркера "file: //", після чого слід (необов'язково порожнє) ім'я хоста та "/". Синтаксис, наведений у Розділі 2, робить весь компонент повноважень, включаючи подвійну косу рису "//", необов'язковою.

Який час бути живим.


2
TimBL також детально розповідає про це у своєму FAQ
Molomby

2
Не кажучи вже про те, що 2 байти можна зберегти, просто використовуючи http:example.comзамість цього, http://example.comможливо, не здається багато, але вони складаються. Google отримує мільйони пошукових запитів на день. Скільки посилань на сторінці? Щонайменше 20. Це означає, що для мільйона пошукових запитів, якби риски не були потрібні, 20 Мб пропускної здатності можна було б зберегти.
Коул Джонсон

1
@ColeJohnson - Чи знали ви, що ви можете залишити і частину протоколу? Отже, це http://example.comможе бути пов'язано як //example.comз документом, переданим через http. Це називається відносною URL-адресою протоколу , усі браузери їх підтримують.
Моломбі

Мені це добре відомо, але я особисто використовую їх лише у CSS. Під час написання HTML я також використовую протокол. Справді немає справжньої причини. За винятком того, що коли HTML5 + CSS3 вперше став "великим" кілька років тому, майже всі сайти, які я переглянув, були такими.
Коул Джонсон

1
Всупереч тому, що може відповісти ваша відповідь, file:/D:/Desktop/Book.pdfє дійсним URI-файлом відповідно до RFC 8089 (з 2017 року), який замінив RFC 1738 (1994) в аспектах URI файлу.
ComFreek
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.