Loading AI tools
一定の書式によってリソース(資源)を指し示す識別子 ウィキペディアから
Uniform Resource Identifier(ユニフォーム リソース アイデンティファイア、URI)または統一資源識別子[1](とういつしげんしきべつし)とは、抽象的または物理的なリソースを識別するためのコンパクトな文字列のことである[2]。また、一定の書式によってリソース(資源)を指し示す識別子である[3]。1998年8月に RFC 2396 として規定され、2005年1月に RFC 3986 として改定された。URI はUniform Resource Locator (URL) の考え方を拡張したものである。URIによって示されるリソースは限定されておらず、インターネット上に存在しない対象や抽象的な概念を示す場合もある[4]。
URI には、以下の2つのサブセットがある。
urn:ietf:rfc:2648
というURNは、RFC 2648への参照を示す。2001年、W3CはRFC 3305[5]内で、上記の考え方を古典的な見解とした。ここで示されたW3Cの新たな考え方により、従来のURLとURNとはすべてURIと呼ばれることになった。URLやURNといった語はW3Cによって非公式な表現とされた。
2012年、WHATWGによってURL Standardの開発が開始された。URL Standardでは、目標の1つとしてRFC 3986 (URI) とRFC 3987 (IRI) を過去のものにすることを掲げている[6][7]。また、従来のURIやIRIを区別する必要がないとして、すべてURLの語を用いている。さらに、W3Cでも、このURL Standardのスナップショットをワーキンググループノートとして公開している。
以下のURI共通構文はすべてのスキーム構文で扱うスーパーセットの定義である。なおこの節(下位含む)では2005年1月に発表された RFC 3986 を主に出典とする。
URI = scheme:[//authority]path[?query][#fragment]
構文図と各コンポーネントの解説は次の通り。
scheme
(スキーム):
(コロン)はスキームの区切り文字でスキーム名の最後に挿入する。文字
で始まり、文字
、数字
、+
(プラス記号)、-
(ハイフン)、.
(終止符)で構成される文字列となる。大文字と小文字を区別しないが、一貫性を保つために小文字の使用を推奨している。authority
(権限)//
(ダブルスラッシュ)の区切り文字から始まる。userinfo
(ユーザー情報)やhost
(ホスト)の扱いは各スキームよって異なる。path
(パス)/
(スラッシュ)で始める必要があり、このことからパスを省略することはできない。権限が含まれていない場合は//
で始めることはできない。さらに相対パスである場合は:
から始めることはできない。パスに?
(疑問符)、#
(番号記号)を含む、あるいは末尾の場合、パスの終わりを示す。階層的(hierarchical)に構成されたデータが含まれ、階層は/
で区切る。query
(クエリ)?
の区切り文字から始まり、#
また末尾で終える。パスと違い、階層的なデータを含まない。RFC 3986、第3章4節において明確な構文は示されていない。fragment
(フラグメント、素片)#
の区切り文字から始まる。任意な扱いで、プライマリ(一次)リソースを参照し、セカンダリ(二次)リソースへ提供するフラグメント識別子を含む。クエリと同様に明確な構文は示されていない。id
属性に何かしらの値を指定し、フラグメントにも同様の値を指定することで、ウェブブラウザは表示の際にその要素の位置までスクロールする。ウィキペディアでは「アンカー」と呼ばれる機能が該当する。gen-delims | : |
/ |
? |
# |
[ |
] |
@ |
— | |||
---|---|---|---|---|---|---|---|---|---|---|---|
sub-delims | ! |
$ |
& |
' |
( |
) |
* |
+ |
, |
; |
= |
上記で列挙した文字は、URI共通構文で区切りとして予約された文字(Reserved Characters)であるため、コンポーネント内で直接使用することはできない。なお[
と]
(角括弧)はIPv6の区切り文字である。sub-delimsはURIスキームの仕様によって定義されることがある。
パーセントエンコーディング(Percent-Encoding)は上記で列挙した予約文字などをURIで使えるよう、別の形式に変換する。名前のとおり、パーセント記号%
とオクテットを16進数で表現した文字を組み合わせた形式で表す。例えばスペース(空白)文字
をパーセントエンコーディングすると%20
に変換される。
予約されていない文字(Unreserved Characters)は、制約がなく、コンポーネント内で自由に使える文字。予約されていない文字は次の通り(RFC 3986 第2章3節)。
なおチルダ~
は古いURIの仕様によってしばしば%7e
に変換されることがある。しかしチルダ含め、予約されていない文字の変換は本来必要ない。
http/httpsスキームの構文を使った例[9]:
スキーム | 権限 | パス | ||||
https: | // | user:password@ | www.example.com:123 | /forum/questions/ | ?tag=networking&order=newest | #top |
ユーザー情報 | ホスト:ポート | クエリ | フラグメント |
#共通構文と同じコンポーネントの解説は除く。
userinfo
(ユーザー情報、認証情報)はホスト:ポートよりも先に記載する必要がある。開始の区切り文字はなく、@
(アットマーク)で区切ることでユーザー情報の終わりを示す。ユーザー情報の形式はuser:password
である。URIにユーザー情報が付加され、かつその情報が正しければウェブブラウザは認証ダイアログを表示せずプライベートページを表示させることができる。認証情報を平文で示すため、パスワードを含んだ認証情報は非推奨である。これはURL Standardでも同様である。
host
(ホスト)はhttp/httpsスキームにおいて必要な権限であり、省略することはできない。port
(ポート)はスキームのデフォルトポートであれば省略できる。
クエリはパスに対しての引数であるがその構文は明確に示されていない。一般的な利用法は、「名前」と「値」の組み合わせ(名前-値ペア、またはキーペアなど)で扱われ、構文にするとkey=value
となり、「名前」と「値」の間は=
(イコール)で結ぶ。このペアが複数存在する場合、上記構文例のように&
(アンパサンド)で繋げる。クエリはWebサーバーおよびクライアント側で処理できる。URL StandardではJavaScript上でクエリ文字列を簡単に扱えるようURLSearchParams()
メソッドが実装されている[10]。
フラグメントはクライアントのみ影響する。URIを決定する際、アプリケーションはフラグメントを除外してからサーバーにリクエストを送る[11]。
この節の加筆が望まれています。 |
IANAに登録されているスキームで、利用が続いている一部を掲載する[12]。
スキーム | 名称 | 仕様書・出典 | 構文 | 用途・備考 |
---|---|---|---|---|
aaa | RFC 6733 |
|
||
aaas | RFC 6733 |
|
||
about | アバウト | RFC 6694 | about://<token>[?query][#fragmen] |
主にウェブブラウザの情報表示なとで用いられる。RFC 6694が定めるトークンはblank ひとつのみであるが、固有機能は各トークンを参照し、処理することが推奨されている。 |
acap | RFC 2244 |
|
||
acct | RFC 7565 |
|
||
cap | RFC 4324 |
|
||
cid | コンテンツID(Content Identifier) | RFC 2392 | cid:<content-id> |
HTML形式の電子メールやMHTMLではMIMEマルチパートのコンテンツで指定されたContent-ID が存在している場合、ドキュメントからcidスキームを使うことで参照できる。例: <img src="cid:example"> |
coap | RFC 7252 |
|
||
coap+tcp | RFC 8323 |
|
||
coap+ws | RFC 8323 |
|
||
coaps | RFC 7252 |
|
||
coaps+tcp | RFC 8323 |
|
||
coaps+ws | RFC 8323 |
|
||
crid | RFC 4078 |
|
||
data | データURI(データURL) | RFC 2397 | data:<mediatype(;parameter)>[;base64]<,data> |
メディアタイプで指定されたコンテンツをデータに添付することで、HTMLドキュメントなどから参照することができる。 コンテンツがプレーンテキスト以外ならBase64でエンコードする必要がある、 |
dav | ウェブダブ(WebDAV) | RFC 4918 |
|
|
dict | RFC 2229 |
|
||
dns | Domain Name System | RFC 4501 |
|
|
example | 例 | RFC 7595 | example:<foo> |
スキーム構文例のために登録されたスキーム。RFC 7595は新しいスキームを登録する手順やガイドラインである。 |
file | file URI scheme | RFC 8089 | file://[[userinfo@]<host>]</path> |
ホストのファイルパスを提示するスキーム。構文で示しているように、権限は認証情報が必要ない、かつローカルホストであれば省略できるため、file:/// からパスが始まる。 |
ftp | ファイル・トランスファー・プロトコル | RFC 1738 | #共通構文 参照 | |
geo | RFC 5870 |
|
||
go | RFC 3368 |
|
||
gopher | RFC 4266 |
|
||
h323 | H.323 | RFC 3508 | h323:[<user>@]<host[:port]>[;url-parameter] |
|
http https |
ハイパーテキスト・トランスファー・プロトコル | RFC 7230 2章7節1項 および 2章7節2項 |
#http/httpsスキームの構文例 参照 | |
iax | RFC 5456 |
|
||
icap | RFC 3507 |
|
||
im | RFC 3860 |
|
||
imap | RFC 5092 |
|
||
info | RFC 4452 |
|
||
ipp | RFC 3510 |
|
||
ipps | RFC 7472 |
|
||
iris | RFC 3981 |
|
||
iris.beep | RFC 3983 |
|
||
iris.lwz | RFC 4993 |
|
||
iris.xpc | RFC 4992 |
|
||
iris.xpcs | RFC 4992 |
|
||
ldap | RFC 4516 |
|
||
leaptofrogans | RFC 8589 |
|
||
mailto | RFC 6068 |
|
||
mid | RFC 2392 |
|
||
msrp | RFC 4975 |
|
||
msrps | RFC 4975 RFC 8873 |
|
||
mtqp | RFC 3887 |
|
||
mupdate | RFC 3656 |
|
||
news | RFC 5538 |
|
||
nfs | RFC 2224 |
|
||
ni | RFC 6920 |
|
||
nih | RFC 6920 |
|
||
nntp | RFC 5538 |
|
||
opaquelocktoken | RFC 4918 |
|
||
pkcs11 | RFC 7512 |
|
||
pop | RFC 2384 |
|
||
pres | RFC 3859 |
|
||
reload | RFC 6940 |
|
||
rtsp rtspu rtsps |
リアルタイム・ストリーミング・プロトコル | RFC 2326 RFC 7826 |
rtsp://<host[:port]>/path |
通常rtspとrtspsの通信プロトコルはTCPであるが、rtspuはUDPとなる。 |
service | RFC 2609 |
|
||
session | RFC 6787 |
|
||
shttp | RFC 2660 |
|
||
sieve | RFC 5804 |
|
||
sip | RFC 3261 |
|
||
sips | RFC 3261 |
|
||
sms | ショートメッセージサービス | RFC 5724 | sms://<recipient[,recipient...]>[?fields] recipient = [+global-number]<local-number> |
|
snmp | RFC 4088 |
|
||
soap.beep | RFC 4227 |
|
||
soap.beeps | RFC 4227 |
|
||
stun | RFC 7064 |
|
||
stuns | RFC 7064 |
|
||
tag | RFC 4151 |
|
||
tel | 電話番号 | RFC 3966 RFC 5341 |
tel:[+global-number]<local-number> |
|
telnet | RFC 4248 |
|
||
tftp | RFC 3617 |
|
||
thismessage | RFC 2557 |
|
||
tip | RFC 2371 |
|
||
tn3270 | RFC 6270 |
|
||
turn | RFC 7065 |
|
||
turns | RFC 7065 |
|
||
tv | RFC 2838 |
|
||
urn | RFC 8141 |
|
||
vemmi | RFC 2122 |
|
||
vnc | RFC 7869 |
|
||
ws wss |
WebSocket | RFC 6455 | ws://<host>[:port]<path>[?query] |
ポート番号のデフォルトはhttp/httpsと同様。 |
xcon | RFC 6501 |
|
||
xcon-userid | RFC 6501 |
|
||
xmlrpc.beep | RFC 3529 |
|
||
xmlrpc.beeps | RFC 3529 |
|
||
xmpp | RFC 5122 |
|
||
z39.50r | RFC 2056 |
|
||
z39.50s | RFC 2056 |
|
いくつかのプログラミング言語や環境では、ネットワーク通信などでURIを扱う際に便利なクラスライブラリなどが標準的に用意されている。Javaではjava.net.URI
が、.NETではSystem.Uri
[14]が用意されている。Androidではandroid.net.Uri
クラスが用意されている[15]。通例、ネットワークリソースだけでなく、ローカルのファイルシステム上におけるリソースを統一的に指し示す目的でも使用される。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.