Dlaczego adresy URL plików zaczynają się od 3 ukośników?

182

HTTP zaczyna się od dwóch ukośników. Np http://example.com.

To samo dotyczy FTP. Np ftp://example.com.

Jednak pliki „URL” zaczynają się od trzech ukośników. Np. Czytanie pliku pdf za pomocą chrome, URL będzie file:///D:/Desktop/Book.pdf.

Dlaczego adresy URL plików używają trzech ukośników?

Pacerier
źródło
5
Opera dla Windows rozwija go file://localhost/D:/Desktop/automatycznie.
Zobacz także stackoverflow.com/q/22772897/632951
Pacerier

Odpowiedzi:

14

Jak wspomnieli inni, schemat pliku ma postać „plik: // <host> / <ścieżka>”. Chociaż większość przeglądarek nie będzie miała problemu tylko z dwoma ukośnikami, i słusznie.

Wszystkie rzeczy są jednakowe, potrójny ukośnik i słowo kluczowe „localhost” istnieją tylko po to, aby zapewnić zgodność z prawidłową składnią URI / URL. W kontekście schematu plików host nie ma znaczenia, ponieważ ładuje się bezpośrednio z systemu plików bez wyraźnego protokołu przesyłania lub ścieżki dokumentu serwera. Ponieważ nie jest to HTTP, nie można go załadować ze standardowego serwera WWW, na którym teoretycznie można skonfigurować wiele lokalnych hostów wirtualnych. I nie można go załadować ze standardowego woluminu sieciowego, który technicznie jest innym „hostem”, ponieważ przeglądarka używa po prostu nazwy woluminu, np. „Plik: /// volume / foo”. Wreszcie, próbowanie czegoś takiego jak „file: //example.com/some/file” nie działa. Prawdopodobnie istnieje jakiś powód, aby wspierać zewnętrznego hosta, ale nie mogę o nim myśleć.

IETF opracowuje obecnie zmiany w celu usunięcia wymogu potrójnego cięcia, chociaż wersja robocza dodaje również kilka dziwnych możliwości, takich jak file:c|/pathi parzyste file://///host.example.com/path.

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

„3. Ta specyfikacja nie definiuje ani nie zabrania mechanizmu dostępu do plików nielokalnych.”

Beejor
źródło
1
Projekt stał się RFC 8089 w 2017 r., Który nadal zawiera twoją ofertę.
ComFreek
252

Pełna składnia to file://host/path.

Jeśli host jest localhost, można go pominąć, co powoduje file:///path.

Patrz RFC 1738 - Jednolite lokalizatory zasobów (URL) :

Adres URL pliku ma postać:

file://<host>/<path>

[…]

W szczególnym przypadku <host>może to być ciąg „localhost” lub pusty ciąg; jest to interpretowane jako „maszyna, z której interpretowany jest adres URL”.

Dennis
źródło
3
Fajnie, nie spodziewałem się, że odpowiedź na to pytanie będzie standardem RFC!
Pacerier
33
@Pacerier Prawie wszystko , co ma związek z Internetem, można wyjaśnić za pomocą RFC (pamiętaj, że niekoniecznie są to „standardy”, ale mogą zostać przyjęte jako takie).
slhck,
5
Zauważ, że Tim Berners Lee przeprosił za te 2 ukośniki, które znajdują się w każdym adresie URL: news.bbc.co.uk/2/hi/technology/8306631.stm
Peter
7
Czy mogę pominąć localhostinne protokoły, czy działa tylko w przypadku file://?
Agos,
3
Zauważ, że Firefox tak naprawdę nie przestrzega tego standardowego `file: // test / C: \` będzie zachowywać się tak samo, jak `file: /// C: \` i `http: /// test` poda nieprawidłowy adres URL błąd
Earlz
27

Dennis wyjaśnił trzeci slash, potrzebny do oddzielenia go hostod path, ale pozostałe dwa są o wiele bardziej interesujące ...

Okazuje się, że były one bezużytecznym i nieco arbitralnym dodatkiem do składni adresu URL. Tim Berners-Lee, wynalazca World Wide Web i autor wielu jego standardów (w tym RFC, do którego Dennis się odniósł), ubolewał nad użyciem podwójnego ukośnika w wywiadzie z 2009 roku.

Berners-Lee wyjaśnił, że podwójny ukośnik, choć w tym czasie konwencja programowa, nie był tak naprawdę konieczny. Popatrz na cały papier i drzewa, powiedział, że można by je uratować, gdyby ludzie nie musieli pisać ani pisać tych cięć na papierze przez lata - nie wspominając już o ludzkiej pracy i czasie spędzonym na pisaniu tych dwóch naciśnięć klawiszy niezliczonych milionów czasy w polach adresowych przeglądarki.

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

Tak więc, z wyjątkiem drobnego (i nietypowego) upływu czasu w prognozowaniu jakieś 18 lat temu, adres URL pliku mógł być po prostu łatwiejszy file:/D:/Desktop/Book.pdfniż file:///D:/Desktop/Book.pdf.

Aby odpowiedzieć na twoje pytanie, nie ma dobrego powodu, dla którego adresy URL zawierają 3 ukośniki.


Aktualizacja: Jak wskazuje @ComFreek w komentarzach, od 2017 roku file:/D:/...powyższy przykład jest teraz ważny! Dzieje się tak dzięki RFC 8089 , który specjalnie wywołuje tę poprawkę z poprzedniego standardu ...

Zgodnie z definicją w [RFC1738] adres URL pliku zawsze zaczynał się od tokena „file: //”, po którym następowała (opcjonalnie pusta) nazwa hosta i „/”. Składnia podana w rozdziale 2 powoduje, że cały komponent uprawnień, w tym podwójne ukośniki „//”, są opcjonalne.

Co za czas na życie.

Molomby
źródło
2
TimBL omawia to również w swoim FAQ
Molomby,
2
Nie wspominając o tym, że 2 bajty można zaoszczędzić, używając po prostu http:example.comzamiast http://example.comTo może nie wydawać się dużo, ale sumują się. Google otrzymuje miliony wyszukiwań dziennie. Ile linków znajduje się na stronie? Co najmniej 20. Oznacza to, że dla miliona wyszukiwań, gdyby ukośniki nie były potrzebne, można by zaoszczędzić 20 MB przepustowości.
Cole Johnson
1
@ColeJohnson - Czy wiesz, że możesz pominąć część protokołu? http://example.comMoże być więc powiązany z //example.comdokumentem przesłanym przez http. Nazywa się to względnym adresem URL protokołu , wszystkie przeglądarki go obsługują.
Molomby,
Zdaję sobie z tego sprawę, ale osobiście używam ich tylko w CSS. Pisząc HTML, również używam protokołu. Naprawdę nie ma prawdziwego powodu. Może z wyjątkiem tego, że gdy HTML5 + CSS3 po raz pierwszy stał się „duży” kilka lat temu, prawie wszystkie strony, na które patrzyłem, były takie.
Cole Johnson
1
W przeciwieństwie do tego, co może sugerować twoja odpowiedź, file:/D:/Desktop/Book.pdfjest prawidłowym identyfikatorem URI pliku zgodnie z RFC 8089 (od 2017 r.), Który zastąpił RFC 1738 (1994) w aspektach URI pliku.
ComFreek