RFC 3986 - 統一資源識別子 (URI): 汎用構文
ステータス: インターネット標準 (STD 66)
更新: RFC 1738
廃止: RFC 2732, 2396, 1808
著者: T. Berners-Lee (W3C/MIT), R. Fielding (Day Software), L. Masinter (Adobe Systems)
発行日: 2005年1月
概要 (Abstract)
統一資源識別子 (Uniform Resource Identifier, URI) は、抽象的または物理的なリソースを識別するコンパクトな文字列です。
本仕様では以下を定義します:
- 汎用URI構文 (Generic URI Syntax)
- 相対形式のURI参照を解決するプロセス
- インターネット上でURIを使用するためのガイドラインとセキュリティに関する考慮事項
主な特徴:
- URI構文は、すべての有効なURIのスーパーセットである文法を定義します
- 実装が、各識別子のスキーム固有の要件を知らなくても、URI参照の共通コンポーネントを解析できるようにします
- URIの生成文法は定義しません。その作業は各URIスキームの個別仕様によって実行されます
重要性
RFC 3986はWeb基盤の中核です:
- 🌐 URLとURNの汎用構文を定義
- 🔗 Web上のすべてのリソース位置特定の基礎
- 📋 HTTP、HTTPS、FTPなどすべてのプロトコルの基盤
- 🎯 相対URI解決アルゴリズム
- 🔒 URIセキュリティの考慮事項
目次 (Contents)
1. Introduction (序論)
- 1.1 URIの概要
- 1.1.1 汎用構文
- 1.1.2 例
- 1.1.3 URI、URL、URN
- 1.2 設計上の考慮事項
- 1.2.1 転写
- 1.2.2 識別と相互作用の分離
- 1.2.3 階層的識別子
- 1.3 構文表記法
2. Characters (文字)
- 2.1 パーセントエンコーディング
- 2.2 予約文字
- 2.3 非予約文字
- 2.4 エンコードまたはデコードするタイミング
- 2.5 データの識別
3. Syntax Components (構文コンポーネント)
- 3.1 スキーム
- 3.2 オーソリティ
- 3.2.1 ユーザー情報
- 3.2.2 ホスト
- 3.2.3 ポート
- 3.3 パス
- 3.4 クエリ
- 3.5 フラグメント
4. Usage (使用法)
- 4.1 URI参照
- 4.2 相対参照
- 4.3 絶対URI
- 4.4 同一文書参照
- 4.5 サフィックス参照
5. Reference Resolution (参照解決)
- 5.1 ベースURIの確立
- 5.2 相対解決
- 5.3 コンポーネントの再構成
- 5.4 参照解決の例
6. Normalization and Comparison (正規化と比較)
- 6.1 等価性
- 6.2 比較ラダー
7. Security Considerations (セキュリティに関する考慮事項)
- 7.1 信頼性と一貫性
- 7.2 悪意のある構築
- 7.3 バックエンド変換
- 7.4 まれなIPアドレス形式
- 7.5 機密情報
- 7.6 セマンティック攻撃
8. IANA Considerations (IANAに関する考慮事項)
9. Acknowledgements (謝辞)
10. References (参考文献)
附録 (Appendices)
クイックリファレンス
URI汎用構文
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
hier-part = "//" authority path-abempty
/ path-absolute
/ path-rootless
/ path-empty
URIコンポーネントの例
foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment
一般的なURIスキーム
| スキーム | 用途 | 例 |
|---|---|---|
| http | HTTPプロトコル | http://www.example.com/ |
| https | セキュアHTTP | https://www.example.com/ |
| ftp | ファイル転送 | ftp://ftp.example.com/file.txt |
| mailto | 電子メール | mailto:[email protected] |
| file | ローカルファイル | file:///path/to/file |
| data | インラインデータ | data:text/plain;base64,SGVsbG8= |
| tel | 電話番号 | tel:+1-800-555-1212 |
予約文字
gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
非予約文字
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
パーセントエンコーディング
pct-encoded = "%" HEXDIG HEXDIG
例:
スペース → %20
"你" (中国語) → %E4%BD%A0
URI vs URL vs URN
関係図
URI (統一資源識別子)
/ \
URL URN
(統一資源位置指定子) (統一資源名)
(アクセス方法) (永続的名前)
比較
| 概念 | 焦点 | 永続性 | 例 |
|---|---|---|---|
| URI | 識別 | 保証なし | すべてのURI |
| URL | 位置 | 位置依存 | http://example.com/page |
| URN | 名前 | 永続的 | urn:isbn:0-486-27557-4 |
重要: すべてのURLはURIであり、すべてのURNはURIですが、すべてのURIがURLまたはURNであるとは限りません。
実装要件
必須実装 (MUST)
- ✅ 基本的なURI構文解析
- ✅ 正しいパーセントエンコーディング処理
- ✅ 相対URI解決アルゴリズム
- ✅ 大文字小文字を区別しないスキームとホスト
- ✅ パス内のドットセグメントの削除
推奨実装 (SHOULD)
- ✅ URI正規化
- ✅ IRIサポート (国際化資源識別子)
- ✅ IPv6アドレスサポート
- ✅ 安全なユーザー情報処理
任意実装 (MAY)
- スキーム固有の検証
- URI等価性比較
- 自動正規化
関連RFC
- RFC 1738: URL仕様 (更新)
- RFC 2396: URI汎用構文 (廃止)
- RFC 2732: IPv6アドレス形式 (廃止)
- RFC 3987: IRI (国際化資源識別子)
- RFC 6874: IPv6ゾーン識別子
- RFC 7230: HTTP/1.1メッセージ構文
- RFC 8820: URI設計と所有権
オンラインリソース
次の章: 1. Introduction (序論)