「Web - URI」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == <br><br> == クエリパラメータ == クエリパラメータを含めた文字列全体はURLである。<br> <br> 例: https://example.com/search.php?keyword=太郎&page=2&sort=desc#section1<br> <br> 上記のURLは以下のような構造に分解できる。<br> これら全ての要素を含めて、1つのURLとして扱う。<br> * スキーム (プロトコル) *: https:// * ホスト名 *: example.com * パス *: /search.php * クエリ文…」)
 
1行目: 1行目:
== 概要 ==
== 概要 ==
URI (Uniform Resource Identifier) とは、インターネット上のリソースを一意に特定するための識別子であり、統一資源識別子と訳される。<br>
<br>
URIは、スキームと呼ばれる部分から始まる。<br>
例えば、https:// や ftp:// といったプロトコルである。<br>
<br>
このスキームの後に、実際のリソースを特定するための情報が続く。<br>
https://www.example.com:8080/path/to/resource?key=value#section<br>
<br>
上記の例では、httpsがスキーム、www.example.comがホスト名 (ドメイン名)、8080がポート番号を表す。<br>
その後のパス (/path/to/resource) は、サーバ上の特定のリソースの場所を示す。<br>
クエリパラメータ (?key=value) では追加の情報を渡しており、フラグメント (#section) は文書内の特定の場所を指定する。<br>
<br>
URIの重要な特徴は、柔軟性と拡張性である。<br>
インターネット上のあらゆるリソースを識別できるよう設計されており、Webページのアドレスだけでなく、メールアドレス (mailto:) やファイル共有プロトコル (ftp:) 等も表現できる。<br>
<br>
また、URIは人間が読める形式であることも特徴である。<br>
例えば、https://www.example.com/products/books というURIでは、exampleドメインの製品カテゴリーの中の書籍に関するページであることが推測できる。<br>
<br>
ただし、URIには制約もある。<br>
使用できる文字は限られており、特殊文字や空白等は適切にエンコードする必要がある。<br>
例えば、スペースは「%20」として表現される。<br>
<br><br>


== URI (Uniform Resource Identifier) ==
リソースを一意に識別するための文字列の形式である。<br>
URLとURNの上位概念として位置づけられる。<br>
<br>
URIは、以下に示す形式で表現される。<br>
<スキーム名>:<スキーム依存部分>
<br><br>
== URL (Uniform Resource Locator) ==
リソースの場所を指定する形式である。<br>
URIの一種であり、主に、Web上のリソースのアドレスを表現する。<br>
<br>
URLは、以下に示す要素で構成される。<br>
* スキーム (プロトコル)
* ホスト名
* ポート番号 (省略可)
* パス
* クエリパラメータ (省略可)
* フラグメント (省略可)
<br><br>
== URN (Uniform Resource Name) ==
リソースの名前を指定する形式である。
場所に依存せず、永続的な識別子として機能する。<br>
<br>
例: ISBN番号やUUID等<br>
<br><br>
== URIとURLの違い ==
主な違いを以下に示す。<br>
* URLは、<u>どこにあるか</u>を示すものである。
* URNは、<u>何であるか</u>を示すものである。
* 全てのURLはURIであるが、全てのURIがURLというわけではない。
* URLは場所が変更されると機能しなくなる可能性があるが、URNは永続的である。
<br>
URIは識別子の大きな枠組みを提供しており、その中でURLは場所、URNは名前を指定する役割を果たす。<br>
<br>
==== URLの例 ====
https://www.example.com:8080/path/to/page?id=123#section1<br>
<br>
* スキーム
*: https
* ホスト名 (ドメイン名)
*: www.example.com
* ポート
*: 8080
* パス
*: /path/to/page
* クエリパラメータ
*: id=123
* フラグメント
*: section1
<br>
以下に示す記述もURLである。<br>
mailto:example@example.com<br>
<br>
* スキーム
*: mailto
* スキーム依存部分
*: example@example.com
<br>
mailtoは、以下に示す理由からURLに分類される。<br>
* リソースへのアクセス方法 (メールクライアントの起動) を指定している。
* 操作可能なアクション (メール送信) を提供している。<br>mailtoは、メールクライアントを起動するための操作的なスキームである。
* URNのような永続的な識別子ではなく、mailtoは通信手段を示している。
<br>
==== URN (URLではないURI) の例 ====
urn:isbn:0-486-27557-4<br>
<br>
* スキーム
*: urn
* 識別子タイプ
*: isbn
* 識別番号
*: 0-486-27557-4
<br>
以下に示す記述もURNである。<br>
# 書籍のISBN (ISBNは本を一意に識別する)
isbn:0-486-27557-4
# UUID (UUIDはグローバルにユニークな識別子)
uuid:550e8400-e29b-41d4-a716-446655440000
# 法人識別子 (LEIは金融機関を一意に識別する)
lei:969500P37YF46QNWK024
<br><br>
<br><br>



2024年11月12日 (火) 00:52時点における版

概要

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
  • 識別番号
    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
    )