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


182

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

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

ただし、ファイル「URL」は3つのスラッシュで始まります。たとえば、クロムを使用してpdfファイルを読み取る場合、URLはになりますfile:///D:/Desktop/Book.pdf

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


5
Opera for Windowsはそれをfile://localhost/D:/Desktop/自動的に拡張します。

回答:


14

他の人が述べたように、ファイルスキーマは「file:// <host> / <path>」の形式です。ほとんどのブラウザでは2つのスラッシュだけで問題は発生しませんが、当然のことです。

すべてが等しい場合、トリプルスラッシュと「localhost」キーワードは、有効なURI / URL構文への準拠を保証するためにのみ存在します。ファイルスキーマのコンテキストでは、ホストは、明示的な転送プロトコルまたはサーバードキュメントパスなしでファイルシステムから直接読み込まれるため、意味がありません。HTTPではないため、理論的には複数のローカル仮想ホストをセットアップできる標準のWebサーバーからロードすることはできません。また、ブラウザは「file:/// volumes / foo」のようなボリューム名を使用するだけなので、技術的には別の「ホスト」である標準のネットワークボリュームからはロードできません。最後に、「file://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
ドラフトは2017年にRFC 8089になりましたが、これにはまだ引用が含まれています。
ComFreek

252

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

ホストがの場合、localhost省略できますfile:///path

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

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

file://<host>/<path>

[…]

特殊なケースとして、<host>文字列「localhost」または空の文字列を指定できます。これは「URLの解釈元のマシン」として解釈されます。


3
クール、私はこの質問に対する答えがRFC標準だとは思っていませんでした!
Pacerier

33
@Pacerier インターネットに関係するほとんどすべてのことをRFCで説明できます(それらは必ずしも「標準」ではなく、そのように採用される可能性があることに注意してください)。
slhck

5
:ティム・バーナーズ=リーは、すべてのURLにあるそれらの2つのスラッシュについて謝罪していることに注意してください news.bbc.co.uk/2/hi/technology/8306631.stm
ピーター・

7
localhost他のプロトコルからも省略できますfile://か?
アゴス

3
Firefoxは実際にはこの標準に従わないことに注意してください `file:// test / C:\`は `file:/// C:\`と同じ動作をし、 `http:/// test`は無効なURLを与えますエラー
アールズ

27

デニスは分離するのに必要な第三のスラッシュ、説明しているhostからとpath、他の二つははるかに興味深いです...

これらは、URL構文への役に立たない、ややarbitrary意的な追加であることがわかりました。World Wide Webの発明者であり、その標準の多く(DennisがリンクしたRFCを含む)著者であるTim Berners-Leeは、2009年のインタビューで「ダブルスラッシュ」の使用を嘆きました。

ダブルスラッシュは、当時のプログラミング規約ではありましたが、実際には必要ないことが判明しました、とバーナーズ・リー氏は説明しました。彼は、人々が長年にわたってそれらのスラッシュを紙に書いたりタイプしたりする必要がなかったなら救われたかもしれないと彼は言った-それらの2つのキーストロークをタイプするのに費やされた人間の労働と時間は言うまでもないブラウザーのアドレスボックスでの時間。

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のおかげです。RFC8089は、以前の標準からこの修正を具体的に呼び出しています...

[RFC1738]の定義によれば、ファイルURLは常にトークン "file://"で始まり、その後に(オプションで空白の)ホスト名と "/"が続きます。セクション2の構文により、二重スラッシュ「//」を含む権限コンポーネント全体がオプションになります。

なんて生きている時間。


2
TimBLは彼のFAQ
Molomby

2
言うまでもなくhttp:example.comhttp://example.comそれを使用するだけで2バイトを節約できることは、多くのように思えないかもしれませんが、合計されます。Googleは1日に数百万件の検索を受け取ります。ページにはいくつのリンクがありますか?少なくとも20。つまり、100万回の検索に対して、スラッシュが必要なければ、20 MBの帯域幅を節約できたことを意味します。
コールジョンソン

1
@ColeJohnson-プロトコル部分も省略できることを知っていましたか?したがって、http経由で送信されるドキュメントのhttp://example.comようにリンクできます//example.com。これはプロトコル相対URLと呼ばれ、すべてのブラウザーがサポートしています。
モロンビー14年

私はそれらをよく知っていますが、個人的にはCSSでのみ使用しています。HTMLを作成するときは、プロトコルも使用します。本当の理由は本当にありません。おそらく数年前にHTML5 + CSS3が最初に「大きく」なったときを除いて、私が見たほとんどすべてのサイトはそのようなものでした。
コールジョンソン

1
あなたの答えが示唆するかもしれないものとは反対に、RFC 8089(2017年以降)file:/D:/Desktop/Book.pdfによる有効なファイルURIは、ファイルURIの面でRFC 1738(1994)に取って代わりました
ComFreek
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.