私たちが日常的に「ウェブアドレス」と呼んでいるURL(Uniform Resource Locator)は、インターネット上のリソースがどこにあり、どうやってアクセスすればよいかを指定するための重要な仕組みです。ウェブページだけでなく、メール送信やファイル転送など、多様なネットワーク通信の基盤となっています。
厳密には、URLはURI(Uniform Resource Identifier)というより広い概念の一種です。URIがリソースを「識別」するためのものであるのに対し、URLはそのリソースの「場所(ロケーション)」と「取得手段」を具体的に示す役割を担っています。
Key Facts
- 定義: ネットワーク上のリソースの場所と取得メカニズムを指定する識別子。
- 起源: 1994年にティム・バーナーズ=リーらによってRFC 1738で定義された。
- 標準化: IETF(Internet Engineering Task Force)やWHATWGが仕様策定に関与している。
- 汎用性: HTTP/HTTPS以外にも、FTP(ファイル転送)、mailto(メール)、JDBC(データベース)などで利用される。
- 国際化: Unicode文字を含むIRI(Internationalized Resource Identifier)により、多言語対応が可能。
URLの歴史と変遷
URLの概念は、World Wide Webの創始者であるティム・バーナーズ=リーとIETFのURIワーキンググループによる協力から生まれました。1992年の議論を経て、1994年に正式な仕様として定義されました。
設計当初は、1985年に構築されていたドメイン名システムと、ディレクトリをスラッシュ(/)で区切るファイルパスの構文を組み合わせた形式が採用されました。興味深いことに、バーナーズ=リー氏は後に、ドメイン名の区切りにドット(.)を用いたことや、ホスト名の前のダブルスラッシュ(//)が不要であったことに後悔の念を漏らしています。
また、初期の草案では「Universal(普遍的な)」という言葉が使われていましたが、最終的に「Uniform(統一的な)」という表現に変更されました。これは当時の開発者間での議論の結果によるものです。
URLの構文と構成要素
一般的なHTTP URLは、重要度の高い順に左から右へ以下の5つのコンポーネントで構成されています。
1. スキーム (Scheme)
リソースへのアクセス方法(プロトコル)を指定します。コロン(:)で終わる形式で、http, https, ftp, mailtoなどが代表的です。基本的には小文字で表記されます。
2. 権限 (Authority)
ダブルスラッシュ(//)に続き、リソースがどこにあるかを示します。以下の3つのサブコンポーネントで構成されます。
- ユーザー情報: ユーザー名やパスワード(現在はセキュリティ上の理由で非推奨)。
- ホスト: ドメイン名またはIPアドレス。IPv6の場合は角括弧 [ ] で囲みます。
- ポート: コロン(:)に続く数字で、特定の通信ポートを指定します。
3. パス (Path)
サーバー内のリソースの階層的な位置を示します。スラッシュ(/)で区切られたセグメントで構成されます。動的なコンテンツを生成する場合、パスの末尾に「pathinfo」と呼ばれる論理的な識別子が追加されることがあります。
4. クエリ (Query)
クエスチョンマーク(?)に続き、サーバーに渡すパラメータを記述します。一般的に「キー=値」のペアをアンパサンド(&)やセミコロン(;)で繋いで表現します。
5. フラグメント (Fragment)
ハッシュ(#)に続き、リソース内の特定の位置(HTMLのid属性など)を指し示します。ブラウザはこの指定がある場合、該当箇所まで自動的にスクロールします。
国際化と特殊なURL形式
インターネットの普及に伴い、ASCII文字以外(日本語や中国語など)を用いたIRI(Internationalized Resource Identifier)が導入されました。これにより、ユーザーは自身の言語でURLを扱うことができます。
ドメイン部分ではIDN(Internationalized Domain Name)という仕組みが使われ、「Punycode」という形式に変換されてDNSで処理されます。また、パス部分の非ASCII文字は「パーセントエンコーディング」を用いてUTF-8形式の16進数に変換されます。
さらに、プロトコル部分を省略して //example.com と記述するプロトコル相対URLという手法もあります。これは、現在のページがHTTPかHTTPSかに合わせて自動的にプロトコルを選択させる形式です。
URL仕様のまとめ
| 構成要素 | 識別子 | 役割 | 例 |
|---|---|---|---|
| スキーム | : |
アクセスプロトコルの指定 | https |
| 権限 | // |
ホスト名やポートの指定 | www.example.com |
| パス | / |
リソースの階層的な場所 | /index.html |
| クエリ | ? |
サーバーへの追加パラメータ | ?id=123 |
| フラグメント | # |
リソース内の特定箇所 | #section1 |
Frequently Asked Questions
URLとURIは何が違うのですか?
URIはリソースを識別するための包括的な概念であり、URLはその中でも「場所」と「アクセス手段」を具体的に示す特定の種類です。つまり、すべてのURLはURIですが、すべてのURIがURLであるとは限りません。
URLに日本語を使えるのはなぜですか?
IRI(国際化リソース識別子)という規格があるためです。内部的には、ドメイン名はPunycodeに、パス部分はパーセントエンコーディングに変換されることで、従来のASCIIベースのシステムでも処理できるようになっています。
URLの末尾にある「#」の意味は何ですか?
これはフラグメント識別子と呼ばれます。ページ全体ではなく、そのページの中にある特定のセクションや要素(ID指定された箇所)へ直接ジャンプするために使用されます。
HTTPSとHTTPのURLの違いは何ですか?
スキーム(プロトコル)の違いです。HTTPは標準的な通信ですが、HTTPSはSSL/TLSによる暗号化が行われており、通信内容の秘匿性と安全性が確保されています。
プロトコル相対URLとは何ですか?
//から始まるURLのことで、スキーム部分を省略した形式です。閲覧しているページがHTTPSであればHTTPSとして、HTTPであればHTTPとしてリソースを読み込みます。