URLと、URIの違いと、呼び方とか


ソースはwikipediaと、RFC

先に結論


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

URL


基本的な形式は以下の通り

  (スキーム名):(スキーム毎に定められた表現形式)


HTTPだけでなく、いろんなスキームがある

mailto:test@test.com
ftp://user:pass@ftp.server.com/public

rubyURI Moduleでパースする

URI.split(url)

    URI を以下の要素に分割した配列を返します。

        scheme
        userinfo
        host
        port
        registry
        path
        opaque
        query
        fragment

URI - Rubyリファレンスマニュアル

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 スキームでは、階層構造を一般的な構文解析アルゴリズムに明示かつ可視にする。 

Uniform Resource Identifier (URI): 一般的構文