初代編集長ブログ―安田英久

URLとURIの違いとは? パーツの構造・名称・意味も大解説!

URL(Uniform Resource Locator)とURI(Uniform Resource Identifier)の構造の違いはご存知ですか? Webページのアドレスを指す場合はどちらを使うべきなのでしょう。URLを分解して「https:(スキーム)」「#(フラグメント)」「?(クエリ)」「パス(path)」などの名称・意味についても解説します。
Web担のなかの人

今日は、ノウハウというよりは、豆知識を。「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)
    アドレスの根本部分。「//」で始まり、さらに以下のパーツに分かれます。

    • yasuda:pass@
      ユーザー情報(userinfo)。アクセスに使うユーザー名とパスワード
    • www.example.com
      ホスト(host)。アクセス先サーバー名
    • :8080
      ポート(port)。アクセス先サーバーのポート番号
  • /news/index.htm

    パス(path)
    指定したオーソリティの中でのアクセス先を指定します。httpでは、サーバーの公開領域内でのディレクトリ名とファイル名ですね。

  • ?page=2&msg=yes

    クエリ(query)
    パスの中でさらにアクセス内容を細かく識別します。httpでは、サーバー上で動作するプログラムへの指示や命令が書かれることが多いです。

  • #hot

    フラグメント(fragment)
    アンカーと呼ばれますが、正式にはフラグメント。主となる内容に加えて部分や代替表現を指定します。httpではこの情報は通常はサーバーには伝えられず、サーバーから送られた情報をクライアント(ブラウザ)が処理する際に使います。

これからは、会議でURLのパーツのことを話す際に、「URLの最後のクエスチョンマークに続くやつが……」ではなく「クエリが……」と言い、「シャープで指定するページ内アンカー」ではなく「リンクの際のフラグメント指定」と言うというのはいかがでしょうか?

ちなみに、昨今のブラウザなどでは、アクセスしているURLは機密情報ではないものとして扱うことが多いので、URLにユーザー名やパスワードを指定することは控えるべきです。上記の例はそういった指定が可能だということを示しているだけですので、ご注意を。

この記事が役に立ったらシェア!
メルマガの登録はこちら Web担当者に役立つ情報をサクッとゲット!

人気記事トップ10(過去7日間)

今日の用語

Python
「Python」(パイソン)は、プログラミング言語の1つ。プログラマのグイド・ヴ ...→用語集へ

インフォメーション

RSSフィード


Web担を応援して支えてくださっている企業さま [各サービス/製品の紹介はこちらから]