Uniform Resource Identifier

Uniform Resource Identifier（ユニフォーム リソース アイデンティファイア、URI）または統一資源識別子（とういつしげんしきべつし）とは、抽象的または物理的なリソースを識別するためのコンパクトな文字列のことである。また、一定の書式によってリソース（資源）を指し示す識別子である。1998年8月に RFC 2396 として規定され、2005年1月に RFC 3986 として改定された。URI はUniform Resource Locator (URL) の考え方を拡張したものである。URIによって示されるリソースは限定されておらず、インターネット上に存在しない対象や抽象的な概念を示す場合もある。
設計.
URL と URN.
URI には、以下の2つのサブセットがある。
2001年、W3CはRFC 3305内で、上記の考え方を古典的な見解とした。ここで示されたW3Cの新たな考え方により、従来のURLとURNとはすべてURIと呼ばれることになった。URLやURNといった語はW3Cによって非公式な表現とされた。
2012年、WHATWGによってURL Standardの開発が開始された。URL Standardでは、目標の1つとしてRFC 3986 (URI)とRFC 3987 (IRI)を過去のものにすることを掲げている。また、従来のURIやIRIを区別する必要が無いとして、すべてURLの語を用いている。さらに、W3Cでも、このURL Standardのスナップショットをワーキンググループノートとして公開している。
共通構文.
<section begin="generic-syntax" />以下のURI共通構文はすべてのスキーム構文で扱うスーパーセットの定義である。なおこの節（下位含む）では2005年1月に発表された RFC 3986 を主に出典とする。
URIの長さは RFC 3986 、URL Standard共に255文字までと定められているが、URL Standardでは「有効なIPv4アドレス」が付け加えられている。
と各コンポーネントの解説は次の通り。
予約文字とパーセントエンコーディング.
上記で列挙した文字は、URI共通構文で区切りとして予約された文字（Reserved Characters）である為、コンポーネント内で直接使用することはできない。なおcodice_27とcodice_28（角括弧）はIPv6の区切り文字である。sub-delimsはURIスキームの仕様によって定義されることがある。
パーセントエンコーディング（Percent-Encoding）は上記で列挙した予約文字などをURIで使えるよう、別の形式に変換する。名前のとおり、パーセント記号codice_29とオクテットを16進数で表現した文字を組み合わせた形式で表す。例えばスペース（空白）文字codice_30をパーセントエンコーディングするとcodice_31に変換される。
予約されていない文字（Unreserved Characters）には制約無く、コンポーネント内で自由に使える文字。予約されていない文字は次の通り（RFC 3986 第2章3節）。
なおチルダcodice_41は古いURIの仕様によってしばしばcodice_43に変換される事がある。しかしてチルダ含め、予約されていない文字の変換は必要無い。
http/httpsスキームの構文例.
http/httpsスキームの構文を使った例：
codice_12（ユーザー情報、認証情報）はホスト:ポートよりも先に記載する必要がある。開始の区切り文字は無く、codice_45（アットマーク）で区切る事でユーザー情報の終わりを示す。ユーザー情報の形式はcodice_46である。URIにユーザー情報が付加され、かつその情報が正しければウェブブラウザは認証ダイアログを表示せずプライベートページを表示させることができる。認証情報を平文で示す為、パスワードを含んだ認証情報は非推奨である。これはURL Standardでも同様である。
codice_13（ホスト）はhttp/httpsスキームにおいて必要な権限であり、省略することはできない。codice_48（ポート）はスキームのデフォルトポートであれば省略できる。
クエリはパスに対しての引数であるがその構文は明確的に示されてない。一般的な利用法は、「名前」と「値」の組み合わせ（、またはキーペアなど）で扱われ、構文にするとcodice_49となり、「名前」と「値」の間はcodice_50（イコール）で結ぶ。このペアが複数存在する場合、上記構文例のようにcodice_51（アンパサンド）で繋げる。クエリはWebサーバ及びクライアント側で処理できる。URL StandardではJavaScript上でクエリ文字列を簡単に扱えるようcodice_52メソッドが実装されている。
フラグメントはクライアントのみ影響する。URIを決定する際、アプリケーションはフラグメントを除外してからサーバーにリクエストを送る。
公式登録のスキーム.
IANAに登録されているスキームで、利用が続いている一部を掲載する。