web-dev-qa-db-ja.com

ファイルのURLが3つのスラッシュで始まるのはなぜですか?

HTTPは2つのスラッシュで始まります。例えば。 http://example.com

FTPについても同様です。例えば。 ftp://example.com

ただし、ファイルの「URL」は3つのスラッシュで始まります。例えば。 chromeを使ってpdfファイルを読むと、URLはfile:///D:/Desktop/Book.pdfになります。

ファイルのURLにスラッシュが3つ使用されるのはなぜですか

183
Pacerier

他の人が述べたように、ファイルスキーマは "file:// <Host>/<path>"の形式です。たいていのブラウザはスラッシュが2つしかなくても問題ないでしょうが、当然のことです。

すべて同じことですが、トリプルスラッシュと "localhost"キーワードは、有効なURI/URL構文への準拠を保証するためだけに存在します。ファイルスキーマのコンテキストでは、明示的な転送プロトコルやサーバー文書パスを使用せずにファイルシステムから直接ロードされるため、ホストは無意味です。これはHTTPではないので、理論上は複数のローカル仮想ホストをセットアップできる標準のWebサーバーからロードすることはできません。ブラウザは単に「file:/// volumes/foo」のようなボリューム名を使用するため、技術的には別の「ホスト」である標準ネットワークボリュームからロードすることはできません。最後に、 "file://example.com/some/file"のようなことを試みてもうまくいきません。おそらく外部ホストをサポートする理由がいくつかありますが、私はどれも考えられません。

ドラフトはまたfile:c|/pathそして偶数file://///Host.example.com/pathのようないくつかの奇妙な可能性を追加しますが、IETFは現在トリプルスラッシュ要件を削除するために変更を起草しています。

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

「3.この仕様は、非ローカルファイルにアクセスするためのメカニズムを定義も禁止もしていません。」

14
Beejor

完全な構文はfile://Host/pathです。

Hostがlocalhostの場合は省略でき、file:///pathとなります。

RFC 1738 - Uniform Resource Locator(URL) を参照してください。

ファイルURLは次の形式を取ります。

file://<Host>/<path>

[…]

特別な場合として、<Host>は文字列 "localhost"または空の文字列です。これは「URLの解釈元のマシン」として解釈されます。

250
Dennis

Dennisは、Hostpathから分離するために必要な3番目のスラッシュを説明しましたが、他の2つははるかに興味深い...

それは、それらがURL構文への役に立たないそして多少恣意的な追加であったことがわかります。 World Wide Webの発明者であり、多くの規格(Dennisがリンクしている のRFC を含む)の作成者であるTim Berners-Leeは、 2009年のインタビューの「二重スラッシュ」。

当時のプログラミング規約ではあるが、二重スラッシュは必ずしも必要ではないことがわかった、とBerners-Lee氏は説明した。紙と木を全部見てください、何年もかけて人々がそれらのスラッシュを紙に書いたりタイプしたりする必要がなかったならば、それは救われることができました。ブラウザのアドレスボックスに.

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つのスラッシュがあるのには正当な理由がありません。


更新:2017年現在、@ ComFreekがコメントで指摘しているように、上記のfile:/D:/...の例が有効になりました。これは RFC 8089 のおかげです。

[RFC1738]の定義によると、ファイルURLは常にトークン "file://"で始まり、その後に(オプションで空白の)ホスト名と "/"が続きます。セクション2で与えられた構文は二重スラッシュ "//"を含む全体の権威構成要素を任意にする。

生きている時間.

27
Molomby