メインコンテンツまでスキップ

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スキーム

スキーム用途
httpHTTPプロトコルhttp://www.example.com/
httpsセキュアHTTPhttps://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 (序論)