RFC 3986 - 統一資源識別子 (URI): 汎用構文
- ステータス: Internet Standard
- 発行日: January 2005
- ストリーム: IETF
- 更新: RFC1738
- 廃止: RFC1808, RFC2396, RFC2732
- エラッタ: エラッタなし
概要 (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 (序論)
Glossary (用語集)
RFC 3986で使用されるキーURI用語の定義。
A
Absolute URI (絶対URI)
スキームを含むがフラグメントを含まないURI。リソースを独立して識別するために使用されます。
Authority (権限)
URIコンポーネントで、ユーザー情報、ホスト、ポートを含みます。形式: [userinfo@]host[:port]
B
Base URI (ベースURI)
相対参照を解決するために使用される絶対URI。
C
Character Encoding (文字符号化)
文字からオクテットへの写像。
D
Dereference (参照解決)
アクセスメカニズムを用いてURIが指すリソースに対して操作を行うこと。
Dot Segment (ドットセグメント)
相対パスのナビゲーションに用いられるパスセグメント . および ..。
F
Fragment (フラグメント)
#で区切られたURIのオプションコンポーネントで、二次リソースを識別します。
G
gen-delims (一般区切り文字)
予約文字のサブセット: : / ? # [ ] @
H
Host (ホスト)
権限コンポーネントの一部で、IPアドレスまたはドメイン名です。
hier-part (階層部分)
URIの主要構造で、権限とパスを含みます。
Hierarchical Identifiers (階層的識別子)
URI構文は、重要度の高いものから順に左から右へ階層的に構成されます。
I
IRI (国際化リソース識別子)
Unicode文字の使用を許可するURI拡張(RFC 3987)。
L
Late-Binding (遅延バインディング)
URI参照の結果は通常アクセス時に決定され、時間の経過や対話の他の側面によって変化しうるという性質。
N
Normalization (正規化)
比較を行えるようにURIを正規形へ変換する処理。
P
Path (パス)
権限スコープ内のリソースを識別するURIコンポーネント。
Percent-Encoding (パーセントエンコーディング)
%の後に2つの16進数を使用して文字をエンコードします。
Port (ポート)
オプションの権限コンポーネントで、ネットワークポートを指定します。
Q
Query (クエリ)
?で区切られたURIのオプションコンポーネントで、非階層データを渡します。
R
Reserved Characters (予約文字)
URIで特別な意味を持つ文字セット。
Relative Reference (相対参照)
スキームで始まらないURI参照で、ベースURIに対して解決されます。
Representation (表現)
ある時点におけるリソースの状態を記録したもの。
Resolution (解決)
相対参照を絶対URIへ変換する処理。
Retrieval (取得)
URIを用いて、それに関連付けられたリソースの表現を得ること。
S
Same-Document Reference (同一文書参照)
空文字列、またはフラグメントコンポーネントのみからなる参照。
Scheme (スキーム)
URIの最初のコンポーネントで、識別子の名前空間を定義します。
Scheme-Based Normalization (スキームに基づく正規化)
スキーム固有の規則を適用する正規化。例: HTTP URIに既定ポート :80 を補う。
Simple String Comparison (単純文字列比較)
2つのURIを文字単位で比較する方法。
sub-delims (サブ区切り文字)
予約文字のサブセット: ! $ & ' ( ) * + , ; =
Syntax-Based Normalization (構文に基づく正規化)
スキームに依存しない正規化規則の適用。大文字小文字の正規化(スキームとホストは大文字小文字を区別しない)、パーセントエンコーディングの正規化、パスセグメントの正規化(. と .. の除去)を含みます。
T
Transcription (転記)
URIは世界規模での転記を考慮して設計されており、言語や地域を越えた入力を容易にするため限られた文字集合を用います。
U
Unreserved Characters (非予約文字)
URIで使用できるが予約されていない文字: A-Z a-z 0-9 - . _ ~
URI (統一リソース識別子)
抽象的または物理的なリソースを識別するコンパクトな文字列。
URI Reference (URI参照)
URIまたは相対参照。
URL (統一リソースロケータ)
アクセスメカニズムを提供するURIのサブセット。
URN (統一リソース名)
永続的で位置に依存しない識別子。
Userinfo (ユーザー情報)
権限コンポーネントのオプション部分で、@の前にあります。
戻る: RFC 3986ホームページ