「Web - URI」の版間の差分
(→概要) |
|||
45行目: | 45行目: | ||
== URN (Uniform Resource Name) == | == URN (Uniform Resource Name) == | ||
リソースの名前を指定する形式である。 | リソースの名前を指定する形式である。<br> | ||
場所に依存せず、永続的な識別子として機能する。<br> | 場所に依存せず、永続的な識別子として機能する。<br> | ||
<br> | <br> |
2024年11月12日 (火) 00:53時点における最新版
概要
URI (Uniform Resource Identifier) とは、インターネット上のリソースを一意に特定するための識別子であり、統一資源識別子と訳される。
URIは、スキームと呼ばれる部分から始まる。
例えば、https:// や ftp:// といったプロトコルである。
このスキームの後に、実際のリソースを特定するための情報が続く。
https://www.example.com:8080/path/to/resource?key=value#section
上記の例では、httpsがスキーム、www.example.comがホスト名 (ドメイン名)、8080がポート番号を表す。
その後のパス (/path/to/resource) は、サーバ上の特定のリソースの場所を示す。
クエリパラメータ (?key=value) では追加の情報を渡しており、フラグメント (#section) は文書内の特定の場所を指定する。
URIの重要な特徴は、柔軟性と拡張性である。
インターネット上のあらゆるリソースを識別できるよう設計されており、Webページのアドレスだけでなく、メールアドレス (mailto:) やファイル共有プロトコル (ftp:) 等も表現できる。
また、URIは人間が読める形式であることも特徴である。
例えば、https://www.example.com/products/books というURIでは、exampleドメインの製品カテゴリーの中の書籍に関するページであることが推測できる。
ただし、URIには制約もある。
使用できる文字は限られており、特殊文字や空白等は適切にエンコードする必要がある。
例えば、スペースは「%20」として表現される。
URI (Uniform Resource Identifier)
リソースを一意に識別するための文字列の形式である。
URLとURNの上位概念として位置づけられる。
URIは、以下に示す形式で表現される。
<スキーム名>:<スキーム依存部分>
URL (Uniform Resource Locator)
リソースの場所を指定する形式である。
URIの一種であり、主に、Web上のリソースのアドレスを表現する。
URLは、以下に示す要素で構成される。
- スキーム (プロトコル)
- ホスト名
- ポート番号 (省略可)
- パス
- クエリパラメータ (省略可)
- フラグメント (省略可)
URN (Uniform Resource Name)
リソースの名前を指定する形式である。
場所に依存せず、永続的な識別子として機能する。
例: ISBN番号やUUID等
URIとURLの違い
主な違いを以下に示す。
- URLは、どこにあるかを示すものである。
- URNは、何であるかを示すものである。
- 全てのURLはURIであるが、全てのURIがURLというわけではない。
- URLは場所が変更されると機能しなくなる可能性があるが、URNは永続的である。
URIは識別子の大きな枠組みを提供しており、その中でURLは場所、URNは名前を指定する役割を果たす。
URLの例
https://www.example.com:8080/path/to/page?id=123#section1
- スキーム
- https
- ホスト名 (ドメイン名)
- www.example.com
- ポート
- 8080
- パス
- /path/to/page
- クエリパラメータ
- id=123
- フラグメント
- section1
以下に示す記述もURLである。
mailto:example@example.com
- スキーム
- mailto
- スキーム依存部分
- example@example.com
mailtoは、以下に示す理由からURLに分類される。
- リソースへのアクセス方法 (メールクライアントの起動) を指定している。
- 操作可能なアクション (メール送信) を提供している。
mailtoは、メールクライアントを起動するための操作的なスキームである。 - URNのような永続的な識別子ではなく、mailtoは通信手段を示している。
URN (URLではないURI) の例
- スキーム
- urn
- 識別子タイプ
- isbn
- 識別番号
- 0-486-27557-4
以下に示す記述もURNである。
# 書籍のISBN (ISBNは本を一意に識別する) isbn:0-486-27557-4 # UUID (UUIDはグローバルにユニークな識別子) uuid:550e8400-e29b-41d4-a716-446655440000 # 法人識別子 (LEIは金融機関を一意に識別する) lei:969500P37YF46QNWK024
クエリパラメータ
クエリパラメータを含めた文字列全体はURLである。
例: https://example.com/search.php?keyword=太郎&page=2&sort=desc#section1
上記のURLは以下のような構造に分解できる。
これら全ての要素を含めて、1つのURLとして扱う。
- スキーム (プロトコル)
- https://
- ホスト名
- example.com
- パス
- /search.php
- クエリ文字列
- ?keyword=太郎&page=2&sort=desc
- フラグメント識別子
- #section1
※注意
クエリパラメータを含む完全なURL文字列は、以下に示すような特徴があることに注意する。
ただし、セキュリティ上の理由から、パスワード等の機密情報をURLのクエリパラメータに含めることは避けるべきである。
- 有効なURLとして扱われる。
- プログラムで解析可能。
- Webブラウザで正しく解釈される。
- 文字エンコーディング
// 日本語等の場合はURLエンコードが必要 $encodedKeyword = urlencode("太郎"); $url = "https://example.com/search.php?keyword=" . $encodedKeyword;
- 複数パラメータの結合
// クエリパラメータは、&で連結 $params = [ 'keyword' => '太郎', 'page' => 2, 'sort' => 'desc' ]; $queryString = http_build_query($params); $url = "https://example.com/search.php?" . $queryString;
- 最大長の制限
- Webブラウザによって異なるが、通常2,000〜8,000文字程度
- 長すぎるクエリは、POSTメソッドを使用する。
- PHPでの取り扱い例
// URLの解析 $url = "https://example.com/search.php?keyword=太郎&page=2"; $parsedUrl = parse_url($url); print_r($parsedUrl); // 出力 Array ( [scheme] => https [host] => example.com [path] => /search.php [query] => keyword=太郎&page=2 )
- クエリ文字列の解析
parse_str($parsedUrl['query'], $queryParams); print_r($queryParams); // 出力 Array ( [keyword] => 太郎 [page] => 2 )