URL と URI の違い

2021/09/02に公開

URL か URI か

インターネットサイトに WWW ブラウザで接続したとき、表示されるものは URL なのか、URI なのか?

結論から先に言うと、これは、どちらも正解です。

RFC3986 にはこのように書いてあります。

1.1.3. URI, URL, URN

URI は、それが位置指定子か、名前か、あるいはその両方かという点において、更に分類できる。 "Uniform Resource Locator" (URL) という用語は、リソースを識別するのに加えて、その主なアクセスメカニズム (例えば、そのネットワーク上の "位置") を記述する事によってリソースの場所を見つける方法を提供するような、URI の部分集合を指す。 "Uniform Resource Name" (URN) という用語は、例えそのリソースが存在しなくなったり、あるいは利用不可能になっても全体において一意で永続的である事が要求される "urn" スキーム [RFC2141] の下での両方の URI、また名前の特性を持つあらゆる他の URI を参照するために歴史的に使用されている。

個々のスキームは、"名前" あるいは "位置指定子" のどちらか一方に分類される必要はない。 あらゆる与えられたスキームからの URI の例でも、名前、位置指定子、あるいは両方の特性を持っているかもしれないし、これはしばしばスキームのどんな品質よりも、命名の権威{naming authority} による識別子の割り当てにおける永続性と配慮に依存する。 将来の仕様書や関連文書では、より制限された用語である "URL" や "URN" よりも一般的な用語である "URI" を使用すべきである [3305]。

砕いて言うと、「URI には位置を示す URL と 名前を示す URN がある。場合によっては位置や名前に限定されない URI があると思うし、位置とか名前とか言う分類だと対応できなくなるといけないから、これから仕様書や関連文書を書くときには URI という言葉を使うとどっちもいい感じで対応できるよ」ということです。

つまり、位置(Location)を示す URL と、名前(Name)を示す URN というものがあり、それは両方とも URI であるということです。

アドレスは URL

話を戻すと、サイトのアドレスを示す「http://example.com/...」は、URL です。サイトの位置を示すものがアドレス(住所)であるからです。また、メールアドレスを示す「mailto:someone@example.com」も、URL です。メールアドレスが URL というのはちょっと違和感を覚えるかもしれませんが、RFC1738 を見てみましょう。

 3.5. MAILTO

    mailto URL スキームはここのインターネットメールアドレスやサービスを示
    すために使用される。インターネットメールアドレス以外のいかなる付加的な
    情報も与えられず意味しない。

    mailto URL は以下のような形を取る:
        mailto:<rfc822-addr-spec>

    ここで <rfc822-addr-spec> は RFC 822[6] に記述されている addr-spec (も
    しくはそれが符号化されたもの) である。mailto URL の中では予約されている
    文字はない。

    パーセント記号 ("%") は RFC 822 アドレス内で共通して使われるため符号化
    しなければならない。

    他の URL と異なり、mailto スキームは直接アクセスされたデータオブジェク
    トの結果ではない。あるオブジェクトを示すような意味はない。これは MIME
    における message/external-body タイプとは違った使用を持つ。

はっきりと URL と書かれています。

このように、位置を示すものが URL であり、URL はしばしばアドレスと呼ばれます。そして、先ほど述べたように URL は URI に含まれます。ですから、サイトのアドレスは URL と呼んでも URI と呼んでもどちらも正解になるわけです。

URN

URN は URL や URI に比べて触れる機会が少ないと思いますが、urn:xxxx:xxxx という形式になります。.NET で開発をされている方はしばしば目にされるかもしれません。
例えば、<runtime> の <assemblyBinding> 要素 にある

xmlns="urn:schemas-microsoft-com:asm.v1"

これが URN です。URN は位置を示しません。ただ名前を示すだけです。しかし、URL がしばしば変更されるのに対し、URN は永続的に使用されることを前提に定義されます。

URL の都市伝説

URL と URI に関して調べていると、複数のサイト、しかも検索で上位に出てくるようなサイトで次のような説明があります。

細かいことを言うと「http:」というパーツはURLとして定められているわけではなく、URIとしての識別子(スキーム)なので、技術仕様などではURIと呼ぶことが多いようです。

または

「URL」は住所を示すものだとお伝えしてきましたが、普段目にするURLは、正確には「URI」です。

「http:(もしくはhttps:)」はURI側のパーツで、URLには含まれません。

これらは大嘘ですので、だまされないようにしてください。RFC1738 にはこうあります。

 2.1. URLs の主要部分

    URL 構文の完全な BNF 表記は Section 5 で与えられる。

    一般的には、URL は以下のように表記される。

       <scheme>:<scheme-specific-part>

    URL は使われているスキーム (<scheme>) とその後ろに続くセミコロンおよび
    スキームに依存する解釈の文字列 (<scheme-specific-part>) からなる。

このように、スキームは URL の重要な成分です。
ですから、http:// で始まるアドレスは URL と呼んでまったく問題ありません。

そして、何度も書いたように、URL は URI の一部ですから、これを URI と呼んでもまったく問題ありません。
どちらも正解です。

執筆日: 2017/04/15

GitHubで編集を提案

Discussion