URLとURIの違いがいまいちわかっていなかったので調べてみました。
URIとはUniform Resource Identifierの略だそうで、直訳すれば”一定の規則に従うリソースの識別子”です。RFC 3986(日本語訳)で定義されています。
Uniform Resource Identifier (URI) は、抽象的あるいは物理的なリソースを識別するための簡潔な文字列である。この仕様書は、一般的な URI の構文と相対的形式である URI 参照を解決するための手順を定義し、更にインターネット上での URI の使用のついての指針やセキュリティについての考察を示す。 URI の構文では、全ての妥当な URI の上位集合{superset} である文法を定義し、実装が取り得る全ての識別子についてのスキーム特有な必要条件を知らなくても URI 参照の共通の構成要素{component} を解析する事を可能にする。この仕様書では各 URI の生成文法は定義しない; それらの作業は各 URI スキームについてのそれぞれの仕様書によって行われる。Uniform Resource Identifier (URI): 一般的構文より引用
つまり、URIは”リソースを識別するための簡潔な文字列”ということです。また、URLについては
URI は、それが位置指定子か、名前か、あるいはその両方かという点において、更に分類できる。 "Uniform Resource Locator" (URL) という用語は、リソースを識別するのに加えて、その主なアクセスメカニズム (例えば、そのネットワーク上の "位置") を記述する事によってリソースの場所を見つける方法を提供するような、URI の部分集合を指す。 "Uniform Resource Name" (URN) という用語は、例えそのリソースが存在しなくなったり、あるいは利用不可能になっても全体において一意で永続的である事が要求される "urn" スキーム [RFC2141] の下での両方の URI、また名前の特性を持つあらゆる他の URI を参照するために歴史的に使用されている。Uniform Resource Identifier (URI): 一般的構文より引用
個々のスキームは、"名前" あるいは "位置指定子" のどちらか一方に分類される必要はない。あらゆる与えられたスキームからの URI の例でも、名前、位置指定子、あるいは両方の特性を持っているかもしれないし、これはしばしばスキームのどんな品質よりも、命名の権威{naming authority} による識別子の割り当てにおける永続性と配慮に依存する。将来の仕様書や関連文書では、より制限された用語である "URL" や "URN" よりも一般的な用語である "URI" を使用すべきである [3305]。
というように書いてあります。つまり、URLはURIの部分集合である(URLであるものはURIでもある、がURIであってもURLであるとは限らない)ということで、URIのうち特に位置指定子(ネットワーク上の位置など)を持つものです。
では、http://www.example.com:80/foo?bar#baz では何処に位置指定子が記述されているのでしょうか?
URI - Uniform Resource Identifiersによると「scheme (http):リソースにアクセスするための手法を識別します。 http_URL の場合、scheme は http で確定です。 」ということなので、httpがアクセスメカニズムのようです。
まとめると、
URI: リソースを識別するための簡潔な文字列
URL: URIの内、アクセスメカニズムが記述されているもの
HTTPでのURLであれば、位置指定子はhttp
ということです。
間違いに気づいたら是非教えて下さい。
0 件のコメント:
コメントを投稿