URLと、URIの違いと、呼び方とか
先に結論
URLはURIに内包される概念で、W3C的にはURIが公式語で、URLは非公式な表現だそうです
Webエンジニア的には、URL以外のURIを使うことは無いので、URL=URIという認識で問題無さそう
HTTPスキーム右側の部品の呼び名
foo://user:passexample.com:8042/over/there?name=ferret#nose \_/ \_______________________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment
RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax を加工
authority はさらに
userinfo, host, post に分けられる
詳しい話
URL : Uniform Resource Locator
- 単一資源位置指定子
- リソースの場所を特定する為の表記方法
URI : Uniform Resource Identifier
- 統一資源位置指定子
- RFC3986
- URIは、URLの考えかたを拡張したもの
- リソースを特定するための表記方法
- 場所を識別する : URL
- 名前を識別する : URN
- 例 : urn:isbn:0451450523(ISBNを使った識別)
URL
基本的な形式は以下の通り
(スキーム名):(スキーム毎に定められた表現形式)
HTTPだけでなく、いろんなスキームがある
例
mailto:test@test.com ftp://user:pass@ftp.server.com/public
ruby の URI Moduleでパースする
URI.split(url) URI を以下の要素に分割した配列を返します。 scheme userinfo host port registry path opaque query fragment
ruby-1.8.7-p174 :001 > require 'uri' => true ruby-1.8.7-p174 :002 > URI.split('foo://user:pass@example.com:8042/over/there?name=ferret#nose') => ["foo", "user:pass", "example.com", "8042", nil, "/over/there", nil, "name=ferret", "nose"]
registryと、opaque って何?
- registry : DNSスキーム等で使う要素。HTTPスキームでは未使用っぽい
- opaque : 以下を参照。こっちも未使用っぽい
URI 構文は階層的に組織化されており、より重要度が減少していく順に左から右へ構成要素が列挙されている。 いくつかの URI スキームにおいては、可視的階層構造はスキーム自体に制限される: この場合、スキーム要素区切り子 (":") の後の全ては、URI 処理から見られない{opaque} とみなされる。 その他の URI スキームでは、階層構造を一般的な構文解析アルゴリズムに明示かつ可視にする。