URLとURIの違いとは? パーツの構造・名称・意味も大解説!
今日は、ノウハウというよりは、豆知識を。「URL」という呼び方と「URI」という呼び方がありますが、どう違うのか、あなたはご存じですか? Webページのアドレスを指す場合は、どちらを使うべきなのでしょうか。
URLとURIは何が違うのか
結論から言うと、URIとURLは同じものではありません。「URI」のほうが広い概念で、「URL」はURIの部分集合です。同様の仕組みに「URN」というものがあります。
その3つを別のものにたとえてわかりやすくいうと、
寿司(URI) ├にぎり寿司(URL) └ちらし寿司(URN)
のような関係です。つまり、URIというものを細かく分類すると、URLとURNに分けられるのです。
それぞれをわかりやすく示すと、次のとおりです。
- URL(Uniform Resource Locator):
場所を示す書き方のルール。
ページや画像などを取得したりするための主要な場所とアクセス方法を指定。
例:(Web担トップページの場所とアクセス方法)
http://web-tan.forum.impressrd.jp/
- URN(Uniform Resource Name):
名前を永続的に識別する書き方のルール。
これ単体ではアクセスできない場合もある。
例:(Web担のムックの最新刊)
urn:isbn:4844327968
- URI(Uniform Resource Identifier):
名前または場所を識別する書き方のルールの総称(親玉)。
URLやURNは、URIで定められたルールに従って書かれたり使われたりする。
ほかにも「URC(Uniform Resource Characteristics」というものも提案されていました。寿司の例でたとえるなら巻き寿司というところでしょうか。
WebページのアドレスはURL? URI?
ということで、Webページのアドレスのことは「URI」と呼んでも「URL」と呼んでもかまいません。ハマチ握りや中トロ握りを「にぎり寿司」と呼んでも「寿司」と呼んでもいいのと同じですね。
細かいことを言うと「http:」というパーツはURLとして定められているわけではなく、URIとしての識別子(スキーム)なので、技術仕様などではURIと呼ぶことが多いようです。
とはいえ、一般的にWebページのアドレスをいう場合には、アクセスしてもらうために示しているのですから、「URL」と呼ぶのが適切でしょう。
URLを解剖してみる
せっかくですから、URIを構成するパーツを理解しておきましょう。
たとえば次のURIから何が読み取れるでしょうか。
http://yasuda:pass@www.example.com:8080/news/index.htm?page=2&msg=yes#hot
URLの場合の各パーツを分解して、正式名称とともに意味を説明していきましょう。
https:
スキーム(scheme)。
この場合は、httpプロトコルを使うことを示します。ほかにhttps:
、ftp:
、data:
、file:
など、いろいろとあります。urn:
も、URIのなかでURN用として定められているスキームです。この部分はIANAという組織が管理していますが、IANAに登録されていないscp:
やmysql:
といったスキームが使われることもあります。//yasuda:pass@www.example.com:8080
オーソリティ(authority)。
アドレスの根本部分。「//」で始まり、さらに以下のパーツに分かれます。
ユーザー情報(userinfo)。アクセスに使うユーザー名とパスワードyasuda:pass@
ホスト(host)。アクセス先サーバー名www.example.com
ポート(port)。アクセス先サーバーのポート番号:8080
/news/index.htm
パス(path)。
指定したオーソリティの中でのアクセス先を指定します。httpでは、サーバーの公開領域内でのディレクトリ名とファイル名ですね。?page=2&msg=yes
クエリ(query)。
パスの中でさらにアクセス内容を細かく識別します。httpでは、サーバー上で動作するプログラムへの指示や命令が書かれることが多いです。#hot
フラグメント(fragment)。
アンカーと呼ばれますが、正式にはフラグメント。主となる内容に加えて部分や代替表現を指定します。httpではこの情報は通常はサーバーには伝えられず、サーバーから送られた情報をクライアント(ブラウザ)が処理する際に使います。
これからは、会議でURLのパーツのことを話す際に、「URLの最後のクエスチョンマークに続くやつが……」ではなく「クエリが……」と言い、「シャープで指定するページ内アンカー」ではなく「リンクの際のフラグメント指定」と言うというのはいかがでしょうか?
ちなみに、昨今のブラウザなどでは、アクセスしているURLは機密情報ではないものとして扱うことが多いので、URLにユーザー名やパスワードを指定することは控えるべきです。上記の例はそういった指定が可能だということを示しているだけですので、ご注意を。
ソーシャルもやってます!