URLとURIの違い|RFC 3986の構文を5分で理解する
URLは「住所」、URIは「識別子」――その違いはRFC 3986を読むと一発で腑に落ちます。
参照した一次情報
- ・RFC 3986「Uniform Resource Identifier (URI): Generic Syntax」(IETF Internet Standard STD 66、URI構文の唯一の規格)
- ・WHATWG URL Standard「URL Living Standard」(ブラウザ実装が従う仕様。RFC 3986との差分を補完)
- ・IANA Uniform Resource Identifier (URI) Schemes(公式スキーム一覧の管理元)
URI・URL・URNの関係
まず結論:URIが最も広い概念で、URLとURNはそれぞれURIの「使い方」を指す呼び方です。
- ・URI(Uniform Resource Identifier):リソースを識別する文字列の総称。RFC 3986が構文を定義
- ・URL(Uniform Resource Locator):リソースの「居場所」を示すURI。
https://example.com/aboutのようにアクセス手段を含む - ・URN(Uniform Resource Name):場所に依存せず「名前」で識別するURI。例:
urn:isbn:0451450523
つまり「URLはURIの一種」が正確な関係です。日常会話では「URL」がほぼ全用途で使われますが、技術文書ではより広い概念のURIが選ばれます。
RFC 3986が定義するURI構文
RFC 3986はURIを次の5つの構成要素に分解します。
scheme://userinfo@host:port/path?query#fragment
\____/ \______/ \__/ \__/\___/ \___/ \______/
① ② ③ ④ ⑤ ⑥ ⑦
例: https://user:pass@www.example.com:443/products?id=42&type=new#section-3
① ② ③ ④ ⑤ ⑥ ⑦| 要素 | 意味 | 例 |
|---|---|---|
| ① scheme | プロトコル種別 | https / mailto / data |
| ② userinfo | 認証情報(非推奨) | user:pass |
| ③ host | ドメイン/IP | www.example.com |
| ④ port | ポート番号 | 443 / 8080 |
| ⑤ path | サーバ上の場所 | /products |
| ⑥ query | パラメータ | id=42&type=new |
| ⑦ fragment | ページ内位置 | #section-3 |
IANA管理の公式スキーム
スキームは100種類以上が登録されています。よく目にする代表例:
http:// ── 平文HTTP(多くがhttpsへリダイレクト) https:// ── 暗号化HTTP(現在のWeb標準) ftp:// ── ファイル転送 file:// ── ローカルファイル mailto: ── メーラー起動(ホスト部なし) tel: ── 電話発信(モバイルで重要) sms: ── SMS送信 data: ── インラインデータ(Base64画像など) javascript: ── JS実行(セキュリティ上は使用回避) about: ── ブラウザ内部ページ(about:blank等) cid: ── メール内画像参照(HTMLメール) urn: ── 名前型識別子(ISBN等)
本ツールの抽出対象はhttp://とhttps://に絞っています。tel:やmailto:は別カテゴリ(電話/メール)として扱う方が混乱しないためです。
URL抽出で起きるトラブルと対策
- ・末尾の句読点を取り込む:「
https://example.com。」の「。」「、」「)」が混入。本ツールは自動で除外 - ・かっこ付きURL:「
(https://example.com)」のかっこを除外して取得 - ・連続URL:「
https://a.com https://b.com」を空白でちゃんと区切る - ・IDNドメイン:日本語ドメイン(
総務省.jp)は内部的にPunycodeでxn----qckwbqc8b4l4d.jpに変換される。本ツールはASCII URLが基本 - ・パーセントエンコード:
https://example.com/path?q=%E6%97%A5%E6%9C%ACのような形は正しく取得
RFC 3986とWHATWG URL Standardの違い
RFC 3986が「すべてのURI」をカバーするのに対し、WHATWG URL Standardは「ブラウザが実際にどう解釈するか」を定義しています。両者は完全に一致しません。
- ・正規化:URL Standardは「
https://example.com/a/../b」を「https://example.com/b」に解決する手順を厳密に定義 - ・パース失敗:URL StandardはRFC 3986より寛容に、できる限り解釈を試みる
- ・IDN:URL StandardはUTS #46に基づく自動変換を定義
ブラウザのアドレスバーやJavaScriptのnew URL()はURL Standard準拠。サーバ側のURIライブラリはRFC 3986準拠が多いです。
URLの抽出は「悪用」もしやすい
文章からURLを取り出すと、リンク先がフィッシングや有害サイトの場合があります。営業活動や調査で外部のURLにアクセスする際は、必ず内容を確認してから踏むのが安全です。
本ツールはURLを「取り出す」だけで、自動的にアクセスしません。だから個人情報を含むURL(OAuth認証コード付きの戻りURL等)を貼っても外部に送られることはありません。
本ツールでの位置づけ
本ツール「メール・URL・電話番号 抽出」のURL抽出は、RFC 3986のうちhttp:///https://で始まる文字列に絞り、末尾の句読点・かっこ・前後の空白を自動的に除外します。
クエリ文字列やフラグメント(#以降)も保持されるため、SNS投稿URL(https://x.com/user/status/123?lang=ja)やGitHubのアンカー付きリンク(https://github.com/user/repo#installation)もそのままの形で取り出せます。
関連ツール・記事
- ・メール・URL・電話番号 抽出(本体)
- ・メールアドレス正規表現の正解はない|RFC 5322の現実と妥協点
- ・日本の電話番号体系|0120・0570・3桁特番の意味
- ・テキストクリーン(URL前後の不要文字を一括で削除)