Perché gli URL dei file iniziano con 3 barre?


182

HTTP inizia con due barre. Es http://example.com.

Lo stesso vale per FTP. Es ftp://example.com.

Tuttavia, gli "URL" dei file iniziano con tre barre. Ad esempio, leggendo un file pdf usando Chrome, l'URL sarebbe file:///D:/Desktop/Book.pdf.

Perché gli URL dei file utilizzano tre barre?


5
Opera per Windows lo espande file://localhost/D:/Desktop/automaticamente.

Risposte:


14

Come altri hanno già detto, lo schema dei file è nel formato "file: // <host> / <percorso>". Sebbene la maggior parte dei browser non abbia problemi con solo due barre, e giustamente.

A parità di condizioni, la tripla barra e la parola chiave "localhost" esistono solo per garantire la conformità con la sintassi URI / URL valida. Nel contesto dello schema dei file, l'host non ha senso poiché si carica direttamente da un filesystem senza alcun protocollo di trasferimento esplicito o percorso del documento del server. Poiché non è HTTP, non può essere caricato da un server Web standard in cui in teoria è possibile impostare più host virtuali locali. E non può caricare da un volume di rete standard che è tecnicamente un altro "host", poiché il browser utilizza solo il nome del volume come "file: /// volumi / pippo". Infine, provare cose come "file: //example.com/some/file" non funziona. Probabilmente c'è qualche motivo per supportare un host esterno, ma non riesco a pensare a nessuno.

L'IETF sta attualmente redigendo le modifiche per rimuovere il requisito della tripla barra, anche se la bozza aggiunge anche alcune possibilità strane come file:c|/pathe persino file://///host.example.com/path.

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

"3. Questa specifica non definisce né proibisce un meccanismo per accedere a file non locali."


1
La bozza è diventata RFC 8089 nel 2017, che include ancora la tua quotazione.
ComFreek

252

La sintassi completa è file://host/path.

Se l'host è localhost, può essere omesso, causando file:///path.

Vedi RFC 1738 - Uniform Resource Locators (URL) :

Un URL di file assume la forma:

file://<host>/<path>

[...]

Come caso speciale, <host>può essere la stringa "localhost" o la stringa vuota; questo viene interpretato come "la macchina da cui viene interpretato l'URL".


3
Bene, non mi aspettavo che la risposta a questa domanda fosse uno standard RFC!
Pacerier,

33
@Pacerier Quasi tutto ciò che ha a che fare con Internet può essere spiegato da un RFC (si noti che non sono necessariamente "standard" ma possono essere adottati come tali).
slhck,

5
Nota che Tim Berners Lee si è scusato per le 2 barre che si trovano in ogni URL: news.bbc.co.uk/2/hi/technology/8306631.stm
Peter,

7
Posso omettere anche gli localhostaltri protocolli o funziona solo per file://?
Agos,

3
Nota che Firefox non segue realmente questo file standard: file: // test / C: \ `si comporterà come` file: /// C: \ `e` http: /// test `fornirà un URL non valido errore
Earlz,

27

Dennis ha spiegato la terza barra, necessaria per separare hostla path, ma le altre due sono molto più interessanti ...

Si è scoperto che erano un'aggiunta inutile e in qualche modo arbitraria alla sintassi dell'URL. Tim Berners-Lee, inventore del World Wide Web e autore di molti dei suoi standard (incluso il RFC a cui Dennis si collegava), ha lamentato il suo uso della "doppia barra" in un'intervista del 2009.

La doppia barra, sebbene all'epoca una convenzione di programmazione, non si rivelò realmente necessaria, ha spiegato Berners-Lee. Guarda tutta la carta e gli alberi, ha detto, che avrebbero potuto essere salvati se la gente non avesse dovuto scrivere o scrivere quelle barre sulla carta nel corso degli anni - per non parlare del lavoro umano e del tempo speso a scrivere quei due tasti premuti da innumerevoli milioni di volte nelle caselle degli indirizzi del browser.

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

Quindi, salvo un breve (e insolito) intervallo di previsione circa 18 anni fa, l'URL del tuo file avrebbe potuto essere facilmente file:/D:/Desktop/Book.pdf, piuttosto che file:///D:/Desktop/Book.pdf.

Non c'è, per rispondere alla tua domanda, nessuna buona ragione per cui gli URL hanno 3 barre.


Aggiornamento: Come sottolinea @ComFreek nei commenti, a partire dal 2017, l' file:/D:/...esempio sopra è ora valido! Questo grazie a RFC 8089 , che chiama specificamente questa correzione dallo standard precedente ...

Secondo la definizione in [RFC1738], un URL di file iniziava sempre con il token "file: //", seguito da un nome host (facoltativamente vuoto) e da un "/". La sintassi fornita nella Sezione 2 rende l'intero componente dell'autorità, comprese le doppie barre "//", facoltativo.

Che momento di essere vivi.


2
TimBL lo elabora anche nelle sue FAQ
Molomby,

2
Per non parlare del fatto che 2 byte potrebbero essere salvati semplicemente usando al http:example.composto di http://example.comPotrebbe non sembrare molto, ma si sommano. Google riceve milioni di ricerche al giorno. Quanti link ci sono in una pagina? Almeno 20. Ciò significa che per un milione di ricerche, se le barre non fossero necessarie, si potrebbero salvare 20 MB di larghezza di banda.
Cole Johnson,

1
@ColeJohnson - Sapevi che puoi tralasciare anche la parte del protocollo? Quindi http://example.compotrebbe essere collegato come //example.comin un documento trasmesso su http. Si chiama url relativo al protocollo , tutti i browser li supportano.
Molomby,

Ne sono ben consapevole, ma personalmente li uso solo nei CSS. Quando scrivo HTML, utilizzo anche il protocollo. Nessun vero motivo davvero. Tranne forse perché quando HTML5 + CSS3 è diventato per la prima volta "grande" alcuni anni fa, quasi tutti i siti che ho guardato erano così.
Cole Johnson,

1
Contrariamente a quanto potrebbe suggerire la tua risposta, file:/D:/Desktop/Book.pdfè un URI di file valido come da RFC 8089 (dal 2017), che ha sostituito RFC 1738 (1994) in termini di URI di file.
ComFreek
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.