URL Scheme Hijacking

スキーム (URL)

64 (URL scheme) は、 URL のうち先頭の : までの部分です。 URL解決するために使うプロトコルや、 URL によって表される対象の種類・命名法などを表しています。

[65] 例えば http://www.example.com/ では httpスキームです。 この URLHTTP プロトコルにおけるアドレスであることを表しています。

[66] tel:0123456789 では telスキームです。 この URL電話番号であることを表しています。

仕様書

呼称

[164] URLスキームであることを明確にするため、「URLスキーム」 と呼ぶこともよくあります。

[105]スキーム (scheme) 」は、プロトコルを表すものであることから、 しばしばそのまま「プロトコル (protocol) 」とも呼ばれます。

[107] : の前までを scheme ないし protocol と呼ぶ場合もあれば、 scheme であることを明確化するために : まで含めて記述することもあります。

[202] DOM APIlocation.protocol のように protocol と呼んで、 https: のように : まで含んだ値を表しています。 (>>160)


[106] しばしば「スキーマ (schema) 」と混同されます。 近い分野の技術用語に「scheme」と「schema」 の両方があるので、「スキー」と「スキー」 と訳し分ける慣例をもって区別しているのであり、 URL のものを「スキーマ」と呼ぶのは明白な誤りです。

[2] Google のドキュメントが scheme をスキーと誤訳しているのはどうにかならんものか。 技術文書を正しく雇えるまともな翻訳者を雇うか、 お得意の AI を生かした誤訳検知をしっかりやってくれよ...

URL scheme の一覧

[1] URL scheme には標準的なもの、提案されている(た)もの、私的に用いられているものなど、 様々なものが存在します。

[67] 現在、すべての URL scheme の一覧と言えるものは存在していません。 IANAIETFRFC などで定義された URI scheme の一覧を管理していますが、 実際に用いられている URL scheme のごく一部しかカバーできていません。 その他 iPhone で用いられている URL scheme など範囲を限った一覧も Web 上に多々存在していますが、そのカバー率はそれぞれです。

[69] 次に示す URL scheme の一覧表は、主に本ウィキに (多かれ少なかれ) 情報がある URL scheme を中心に掲載しています。 >>50JSON ファイルは、次に示す一覧表に加え、 より多くの URL scheme の情報を掲載しています (が、それでもカバーできていない URL scheme が尚も数多く存在していると思われます)。

: (空文字列)
_:
a:
aaa:
aaas:
abematv:
moz-abdirectory:
moz-abldapdirectory:
abematv:
abematv-license:
moz-abmdbdirectory:
about:
action:内部動作呼び出し非標準Craving Explorer
addbook:非標準, IANA 登録[W3CLIST]
address:住所非標準, IANA 登録[Palmer 2001] (RFC 2396)
addressbook:
adiumxtra:
adobe:
acap:
acct:
activitytoday:
afp:
afs:
aftp:
aggregator:
aim:AOL IM非標準[W3CLIST]
ajp:
airbnb:
akamaihd:
akeita:
amqp:
amqps:
android:
android-app:
vnd.android.nfc:
android.resource:
aniutaap:
anon-ftp:匿名FTP歴史的 → ftp:, IANA登録Dan Connolly
ant:
antlib:
apex:APEXIETF 提案標準 (例), IANA 登録RFC 3340, RFC 3343
app:Air非標準, IANA 登録Air
x-apple-health:
x-apple-reminder:
applescript:
com.apple.Home:
applenews:
application:非標準, IANA 登録Microsoft
x-oma-application:OMA 規格, IANA 登録
applications:非標準KDE
app-prefs:
apps:非標準, IANA 登録libferris
apt:
ascpt:AppleScript非標準
asin:
async:
ar:非標準KDE
archive:
arib:ARIB TVIETF I-D, IANA 登録
arib-dc:
arib-file:
arib-ic:
arib-node:
arib-rtl:]
arib-seg:
arib-seggrp:
arib-series:
arib2:
arn:
artifact:
atlantik:非標準KDE
attachment:非標準, IANA登録Opera
audiocd:非標準KDE
auth:階層的認証識別子期限切れ (IETF I-D)[draft-pstickler-auth]
x-avefront:
aw:
azure:
balancer:
bathyscaphe:
bazaar:
bbs2ch:
bcp:
beaker:
bibp:非標準Lynx
bingmaps:
x-birdfeed:
bitcoin:
bk:BitKeeper
blob:
bluray:
brave:
btmh:
btspp:
buffer:
builtin:組込みW3C 勧告 (例)VoiceXML (例)
bundle:
bundleclass:
bum:
burn:
bz2:
bzip:bzip非標準KDE
bzip2:bzip2非標準KDE
bzr:
bzr+http:
bzr+https:
bzr+sftp:
bzr+ssh:
bzr+ftp:
bzr+lp:
c:
cache:
caf%C3%E8:
calshow:
ms-call:
callto:電話満期 (IETF I-D)[W3CLIST]
cap:
castanet:非標準[W3CLIST]
cat+:非標準Protozilla
x-catalog:W3C WD
ccrc:
ccso:
cdda:
cddb:
cdl:
cdo:非標準Microsoft Office
cdrom:
cdv:
cf:Chrome Frame
cf+hubic:
cf+http:
cfh:local CGI非標準
cgi:local CGI非標準KDE
cgi+:local CGI非標準Protozilla
ms-chat:
chrome:
chrome-data:
chrome-devtools:
chrome-error:
chrome-extension:
chrome-extension-resource:
chrome-guest:
chrome-native:
chrome-resource:
chrome-search:
chrome-untrusted:
chromewebdata:
cht:
chttp:
ci:
cid:
cifs:
class:
classpath:
clr-namespace:
clsid:CLSID
cm:
cmd:HTMLayout
cnrp:
coap:
coaps:
coap+ws:
coap+ws::
cockatoo:
cocon:
cocon2:
cocoon:
coffee:
coloplwcat:
com050voipbiz:
comgooglemaps:
com.google.maps:
compress.bzip2:bzip2非標準PHP 4.3+
compress.zlib:zlib非標準PHP 4.3+
com-wordpress:
concat:
configuration:
connect:
consolemail:
consul:
content:
context:
context:libferris
control:動画制御W3C 会議での提案
copy:
corbaloc:
corbaname:
cpan:
cpurl:
crid:TV随時内容参照識別子IANA 登録済RFC 4078 (RFC 3986), [IANAREG]
cros:
crypto:
cso:Lynx
csta:
ctfile:
cti:Computer Telephone IntegrationBlackBerry
cue:
cuseeme:
cvs:
cvs+ext:
cvs+pserver:
cvs+ssh:
cydia:
daap:
darcs+http:
darcs+ssh:
dat:
data:
datagram:
dav:
dayone:
dayone1:
dayone2:
daytime:
db:
dbapi-8:
dbcache:
dbase:
dc:Direct Connect links on iDEN networks非標準BlackBerry
dcmdlr:
dcmmcspc:
dcp.tcp.pft:ETSI 規格 (参考)ETSI TS 102 821
debtorrent:
deliveries:
dict:辞書サービス・プロトコルIANA 登録済RFC 2229 (RFC 1738), [IANAREG], [W3CLIST]
did:
diff:差分非標準libferris
direct:
discord:
com.hammerandchisel.discord:
disk:非標準[Apple]
dix:DIXIETF I-D
dns:DNSIETF 提案標準, IANA 登録済RFC 4501 (RFC 3986), [IANAREG], [W3CLIST]
doc:
docker:
doi:デジタル物体識別子未登録, 満期 (IETF I-D)[draft-paskin-doi-uri]
dpbx:
dpi:
dpml:
ms-drive-to:
druby:
dsm-cc:
org.davic.dsmcc:
dtmf:
dtn:
dtv:
duckduckgo:
dummycache:
dummymail:
duri:
dvb:
dvd:
dvdnav:
dweb:
echofon:
echofonpro:
ecmascript:ECMAScript 符号ATSC標準, IANA登録DASE
ed2k:eDonkey 2000
edge:
eid:外部識別子満期 (IETF I-D), IANA 登録draft-finseth-url (RFC 2396), [W3CLIST]
elasticsearch:
emacs:Emacs非標準, IANA 登録libferris
email:
enp:
enum:ENUM満期 (IETF I-D), IANA 登録draft-brandner-enum-uri (なし)
eshop:
esl:未登録, 満期 (IETF I-D)[draft-palmer-esl-uri]
esx:
etcd:
-moz-evil:
example:
exec:
exit:
expect:
ext:未登録, 非標準Forrest
extension:
fab:
facetime:
facetime-audio:
facetime-audio-prompt:
facetime-prompt:
fax:
faxs:
fb1642839089311943:
fb937784266316186:
fbsql:
fca:非標準, IANA 登録libferris
fcast:
fcgi:
fd:
feed:RSS feedIETF I-D[draft-obasanjo-feed-URI-scheme]
feedback-hub:
feeds:RSS feeds (複数)非標準
feedsearch:
ffmpeg:
file:
fileb:
filecache:
moz-filedata:
filedesc:
filemail:
filerun:ファイル実行非標準, IANA登録
filesystem:
finger:Finger非標準[W3CLIST], Lynx
findmy:
firebird:Firebird データベース
firefox:Firefox非標準, IANA 登録libferris
firefoxhtml:Firefox非標準, IANA 未登録
firefoxurl:Firefox非標準, IANA 未登録
firefox.url:Firefox非標準, IANA 未登録
fish:非標準KDE
floppy:FD非標準KDE
fmip1:
x-foldingtext:
fonts:非標準KDE
fors:
freenet:
fsp:
ftp:
ffcpl:
ftdoc:
ftpes:
ftps:FTP over SSL未登録, 非標準PHP 4.3+
ftss:4Suite repository非標準仕様案 (RFC 2396)
fubscript:JScript
fukuokanbs:
further:
furtherstudy:
gamecenter:
gap:
gcf:Chrome Frame
gdocs:
ge:
geo:
x-geo:
geographica:
gfarm:
gg:
ghelp:
gimage:Windowsサイドバーガジェット画像非標準Microsoft
gio+*:
git:
git+git:
git+http:
git+https:
git+ssh:
gitannex:
github:
github-windows:
gitsm:
gizmoproject:
glass:Google Glass
glob:
gnmguardian:
go:
google:
google.streetview:
googlechrome:
googlechromes:
gopher:
greasemonkey-script:
gridlog.udp:
groupwise:非標準KDE
groupwises:非標準KDE
gs:
gsiftp:
gsm-sms:SMS満期 (IETF I-D)[draft-antti-gsm-sms-url] (RFC 1738), [W3CLIST]
gsx:
gumby:Gumby
guardian:
gz:gzip非標準
gzip:gzip非標準KDE
h320:H.320満期 (IETF I-D)[draft-cordell-sg16-conv-url] (RFC 1738)
h323:H.323IANA 登録済[draft-cordell-sg16-conv-url] (RFC 1738), RFC 3508 (なし), [IANAREG]
h324:H.324満期 (IETF I-D)[draft-cordell-sg16-conv-url] (RFC 1738), [W3CLIST]
halflife:Half-Life Protocol非標準
har:非標準Hadoop
harvest:
hash:
hashed:
hatenablog:
hatenabookmark:はてなブックマーク
hcp:HTML Help非標準[Microsoft]
hdfs:HDFS非標準
hdl:非標準[W3CLIST]
hds:
help:KDE help非標準KDE
vnd.sun.star.help:
hftp:非標準Hadoop
hg+http:
hg+https:
hg+static-http:
hg+ssh:
hkp:
vnd.sun.star.hier:
hl:
hls:
hls+file:
hls+http:
hnews:NNTP over HTTP満期 IETF I-D[W3CLIST]
horb:
hop:
hsi:
hsftp:非標準Hadoop
hlsvariant:
htdb:SQL非標準DataparkSearch
htt:HTTP非標準 → http:, ttp:
http:HTTPIETF 原案標準, IANA 登録済RFC 1630, RFC 1738, RFC 1945 (RFC 1738 {不適合}, RFC 1808 {不適合}), RFC 2068 (RFC 1738 {不適合}, RFC 1808 {不適合}), RFC 2616 (RFC 2396), [IANAREG]
h++p:HTTP非標準 →http:
ht*tp:HTTP非標準 →http:
http+aes:
http+docker:
httpkey:
httpmd:
httpmu:
http_proxy:
https:
https+aes:
httpstream:
httpsy:
httpu:
httpx:
hxxp:
hw:
hydra:
hyperv:
iax:Inter-Asterisk eXchange Version 2IETF I-D, IANAREG 登録済 (予備)draft-guy-iax, IANAREG (予備)
iax2:
ibase:
ibooks:
ical:
icap:
icecast:
ichat:
moz-icon:
icyx:
ifx:
iiop:
iiopboot:
iioploc:[W3CLIST]
iiopname:Interoperable Naming Service非標準, IANA登録, 時代遅れ → corbaname:
ilu:[W3CLIST]
im:即席メッセージ受信箱IETF 提案標準RFC 3860 (RFC 2396), [IANAREG]
imap:IMAPRFC 2192 (RFC 1738, RFC 1808), IANAREG, RFC 5092
imap-message:IMAP非標準Thunderbird
imessage:
imaps:IMAP over TLS非標準KDE
import:輸入非標準, IANA 登録E
info:Information Assets with Identifiers in Public Namespace (RFC 化), Texinfo (非標準)IANA 登録済[draft-vandesompel-info-uri], RFC 4452, IANAREG
intent:
intl:非標準, 未登録KDE
ior:CORBA IOR非標準[W3CLIST]
ip:
ipfs:
ipns:
ipp:
ircIRCW3C 勧告[draft-mirashi-url-irc] (RFC 1738), PICS (RFC 1738), [W3CLIST]
ircs:IRC over TLS非標準, 未登録
iric.beep:IRIC over BEEPIETF 提案標準RFC 3983 (RFC 3981 (RFC 2396, RFC 2732)), [IANAREG]
iris:IRISIANA 登録済RFC 3981, IANAREG
iris.beep:IRIS/BEEPIANA 登録済RFC 3983, IANAREG
iris.xpc:IANA 登録済RFC 4992, IANAREG
iris.xpcs:IANA 登録済RFC 4992, IANAREG
iris.lwz:IANA 登録済RFC 4993, IANAREG
itms:iTunes Music Store非標準[Apple]
itms-apps:
itmss:
itms-watch:
inico2:
inico2http:
inico2https:
inico2youtube:
instagram:
ios-app:
itpc:
itaprdp:
its:
jabber:Jabber廃止 → xmpp: (実験的)[JEP-0032] (RFC 2396)
jar[W3CLIST], [Mozilla]
java:Java 符号非標準
javabean:非標準, IANA 登録 → java:
javarmi:非標準Bill Jansen
javascriptJavaScript[W3CLIST]
jdbc[W3CLIST]
jeditresource:非標準, 未登録
jms:WebSphere MQ非標準, IANA 登録
jnp:非標準, IANA登録
jrap:JRAP
jrt:
jscript:JScript 符号非標準, IANA 登録 → javascript:
x-jsd:Venkman非標準, IANA 未登録Venkman
kafeCoffee pot[RFC 2324]
%4BaffeeCoffee pot[RFC 2324]
kaffeCoffee pot[RFC 2324]
kafoCoffee pot[RFC 2324]
kahvaCoffee pot[RFC 2324]
kahviCoffee pot[RFC 2324]
kavaCoffee pot[RFC 2324]
kdx:KDX非標準, 未登録
kdxtracker:KDX非標準, 未登録
keynote:Keynote未登録, 非標準Keynote
keyparc:非標準, IANA 登録
keyword:検索非標準, 未登録Firefox, Galeon
kfs:kumofs非標準Hadoop
kinza:
klik:
k%C3%A1va:
kn:
kohv:
koffee:
koffie:
lastfm:
launch:
launchpro:Launch Center Pro
launchplus:Launch+
launchx:Launch X
lbry:
ldapLDAPRFC 1959 (RFC 1738), RFC 2255 (RFC 1738), [RFC-ietf-ldapbis-url-09.txt], RFC 4516, IANAREG
ldapi:
ldaps:LDAP over TLS非標準KDE
lftp+ftp:
lftp+sftp:
lftp+webdav:
lftp+webdavs:
lib:
liberator:
lid:
lifn[W3CLIST]
line:
linelive:
link:非標準, IANA登録
livescriptLiveScript時代遅れ → javascript:[W3CLIST]
livewire:
local-file:ファイル歴史的 → file:, IANA登録Dan Connolly
local:
localapp:
location:
locktoken:
locmemcache:
loopback:
lpr:
lrq:満期 (IETF I-D)[draft-cordell-sg16-conv-url] (RFC 1738), [W3CLIST]
lsidres:
lxc:
lynx*:非標準Lynx
lynxcgi:プログラム実行 (CGI)非標準Lynx
lynxexec:プログラム実行非標準Lynx
lynxhist:非標準, 内部用Lynx
lynxkeymap:非標準, 内部用Lynx
lynxprog:プログラム実行非標準Lynx
mac:HFS+非標準KDE
magnet:
mail:電子メイルメッセージ未登録, 非標準Forrest
mailbox:メイル箱非標準[W3CLIST]
mailserver:
mailto:
main:
mamdmviewer:
man:
x-man-path:
mapbox:
maps:
market:Androidマーケット
math:
mathproc:
mbone:
mbox:mbox非標準KDE
md5:
media:非標準KDE
mediasource:
mediastream:
medium:
mega:
memcache:
memoflowy:
memorymail:
message:
message-id:
x-message-id:
metainfo:非標準KDE
mf:
mhtml:MHT 内の実体非標準[Microsoft]
microsoft-edge:
mid:
mime:非標準[Microsoft]
mime:非標準, IANA 登録libferris
mirror:
mk:
mkdaijirin:大辞林
mms[M$]
mmsh:
mmst:
mmsto:MMS非標準
mmsu[M$]
mobilenotes:
mobilepay:
mochaJavaScript[W3CLIST]
modem:モデム廃止 (IETF 提案標準), IANA 登録済RFC 2806 (RFC 2396), RFC 3966, IANAREG
mongodb:
mono:はてなモノリス
monsterstrike-app:
montulli:
mountpoint:提案Opera
moz:
moz-extension:
moz-nullprincipal:
mpst:
mrml:MRML非標準KDE
ms:
ms-app:
ms-appx:
ms-appx-web:
msbd:[M$]
ms-excel:
ms-help:
mshelp:
ms-its:
ms-itss:
ms-local-stream:
msn:MSN
msn:MSN Messenger
msnim:MSN Messenger
msnweather:
ms-powerpoint:
msrp:
msrps:
ms-settings-airplanemode:
ms-settings-bluetooth:
ms-settings-cellular:
ms-settings-emailandaccounts:
ms-settings-location:
ms-settings-lock:
ms-settings-power:
ms-settings-screenrotation:
ms-settings-wifi:
ms-windows-store:
ms-word:
msql:
mssql:Microsoft SQL Server データベース
mssql+pyodbc:
vnd.ms.wmhtml:
mtqp:MTQPIETF 提案標準, IANA 登録済RFC 3887 (RFC 2396), IANAREG
mupdate:MUPDATEIETF 実験的, IANA 登録済RFC 3856 (RFC 2192 (RFC 1738, RFC 1808)), IANAREG
multi:
music:Music
mvn:
myhttp:HTTP非標準 → http:, IANA登録Protozilla
myportal:IANA 未登録, 非標準Galeon
myrdf:非標準, IANA 登録libferris
mysql:
mysql+mysqlconnector:
mysql+cymysql:
mysql+mysqldb:
mysql+oursql:
mysql+gaerdbms:
mysql+pyodbc:
mysql+pymysql:
mysql+zxjdbc:
mysql2:
mysqli:
mysqlgis:
nats:
natsulion:
ncftp+ftp:
nicojk:
nethelp:
net.tcp:
x-netlog-udp:
netrek:
moz-neterror:
news:
newsglue:
newsmonster-subscription:未登録, 非標準NewsMonster
newspost:ニュース投稿非標準Lynx
newsrc:
newsreply:ニュース返答非標準Lynx
nfs:
ni:
nicoli:
niconico:
nifty:
nih:
nis:
njar:
nntp:
nodes:
noicyx:
note:メモ帳非標準, 例MSDN
notes:Lotus Notes
npm:
ns:
nsfw:
nudp:
nvram:ARIB
nvrams:ARIB
nzw31findnote:
oai:
ocap:ACAPATSC
oci8:
odbc:
odbc(access):
vnd.sun.star.odma:
office:Microsoft Office
ogg:
oid:
onavoapp:
onavoprotect:
onedrive:
onenote:
onepassword3:1Password
opaquelocktoken不透明固定字句IETF 提案標準RFC 2518 (RFC 2068 (RFC 1738, RFC 1808 {不適合})), [IANAREG]
open:OpenURLNISO 標準化中
openpayee:
openvz:
openvz+unix:
openvz+ssh:
openvz+tcp:
opera:
operaemail:
oracle:
oracle+cx_oracle:
ormi:
osc:
osc.tcp:
osc.udp:
otpauth:
outlook:
owc:非標準Microsoft Office
p:
p2p.udp:
p4:
pack:IETF I-D, IANA 登録済 (予備)draft-shur-pack-uri-scheme, IANAREG (予備)
package:
page:
paint:
par2+*:
par2+ftp:
par2+s3:
paramiko+scp:
paramiko+sftp:
password:合言葉入力非標準T-Time
path:階層的 URN満期 (IETF I-D), IANA 登録
pcast:非標準[Apple]
peercast:
ms-people:
peripheral:ARIB 標準規格, IANA 未登録
perldoc:perldoc非標準KDE
perlfs:
person:未登録, 非標準Forrest
pexpect+scp:
pexpect+sftp:
pg:
pgrid:
pgrids:
pgsql:
phantomjs:
phar:
phone:非標準[W3CLIST]
ms-photos:
photos-redirect:
php:PHP 入出力ストリーム未登録, 非標準PHP 3.0.13+
pict:
pin:BlackBerry
pipe:
pirol:
pkcs11:
vnd.sun.star.pkg:
platform:
player-ookami:
pluginv1:
plucker:
pnm:
pop:POP3IETF 提案標準RFC 2384 (RFC 1738 {不適合}), [IANAREG]
pop3:
pop3s:
pos:
postgis:
postgres:
postgresql:
postgresql+pg8000:
postgresql+psycopg2:
postgresql+zxjdbc:
postman:
ppaction:
prefs:
pres:
print:
printdb:
printer:
programs:
project:
prospero:
protozilla:
moz-proxy:
proxylet:Proxylet未登録, 満期 (IETF I-D)draft-maciocco-opes-omml
pseudo-cgi:
psion:
psql:
psyc:
puppet:
purl:
pvr:
pydoc:非標準KDE
pydrive:
pyimp:
pymemcache:
pythonista:
pythonista2:
pythonista3:
pwid:
qemu:
qemu+unix:
qemu+ssh:
qemu+tcp:
quicktime:非標準[Apple]
qname:QName満期 (IETF I-D)draft-pstickler-qname
q%C3%A6hv%C3%A6:
radio:
ram:
rar:
rcs-chat:
rdar:
rdf:
rdp:非標準KDE
realplayer.autoplay.6:
rec:
redirect:redirect非標準Protozilla
redis:
rediss:
redis+sentinel:
redis+socket:
rediscache:
remembrance:非標準libferris
remote:非標準KDE
repo:
res:資源非標準[W3CLIST], Microsoft
res-hint:満期 (IETF I-D)
resource:資源非標準Mozilla
resources:非標準
respec:ReSpec 資源非標準
rest:REST Webサービス
reuters:
rexx:
rlan:非標準, IANA 登録KDE
rlogin:廃止 (IETF 情報提供 RFC)RFC 1630
rmi:非標準
rom:非標準
romsound:ARIB 標準規格, IANA 未登録
root:非標準, IANA 登録libferris
rsh:RSH非標準, IANA登録
rss:RSS feed非標準, IANA登録, 非推奨 → feed:
rsync:rsync非標準, IANA登録
rtmp:
rtmpe:
rtmps:
rtmpt:
rtmpte:
rtmpts:
rtp:
rtsp:RTSP over TCPIETF 提案標準RFC 2326 (RFC 2068 (RFC 1738 {不適合}, RFC 1808 {不適合})), [IANAREG]
rtspt:非標準KDE
rtspu:RTSP over UDPIETF 提案標準, 未登録RFC 2326 (RFC 2068 (RFC 1738 {不適合}, RFC 1808 {不適合}))
rvp:[W3CLIST]
rwhois:RWhois満期 IETF I-D[draft-mealling-rwhoisurl] (RFC 1738, [W3CLIST]
rx:[W3CLIST]
s3:
s3+http:
s3n:
sap:
scgi:
scp:
screen:
sctp:
sdp:SDP満期 (IETF I-D)[draft-fujikawa-sdp-url] (RFC 1738), [W3CLIST]
search:未登録, 非標準Forrest
search-ms:
secondlife:
seeq:Seeq
service:SLPIETF 提案標準RFC 2609 (RFC 2396), [IANAREG]
session:
settings:非標準KDE
ms-settings:
sftp:SFTPIETF I-D[draft-ietf-secsh-scp-sftp-ssh-uri] (RFC 3986)
sgn:
shc:
sherlock:
shell:シェル命令非標準Windows
shoebox:
shortcut:
sieve:Sieve非標準KDE
simp:SIMPSSD
simple:
simplytweet:SimplyTweet
sip:
sips:
site:非標準Forrest
siteoforigin:非標準Microsoft
skype:
skype4com:
slack:
sleipnir:
slpro:
smb:SMBIETF I-D[draft-crhertel-smb-url], [W3CLIST]
smileplayer2:
sms:
smsto:
smtp:SMTP満期 (IETF I-D)[draft-earhart-url-smtp] (RFC 1738)
smtp+ssl:
smtp+tls:
smtps:SMTP/TLS非標準KDE
snews:NNTP/TLSIETF 提案標準 (歴史的), IANA 登録済 (歴史的)[W3CLIST], draft-ellermann-news-nntp-uri (歴史的), IANAREG (歴史的)
snewspost:ニュース投稿 (安全)非標準Lynx
snewsreply:ニュース返答 (安全)非標準Lynx
snmp:SNMPIETF 提案標準, IANA 登録済RFC 4088 (RFC 3986), [IANAREG]
soap:SOAP非標準
soap.beep:SOAP/BEEPIETF 提案標準, IANA 登録済RFC 3288 (RFC 2396), IANAREG
soap.beeps:SOAP/BEEPIETF 提案標準, IANA 登録済RFC 3288 (RFC 2396), IANAREG
soap.mail:SOAP/SMTP非標準 (実験的)SoapMail
soap.udp:
sockmux:
socks:
socks4:
socks4a:
socks5:
socks5h:
soldat:
solr:
spacewalk:
spatialite:
sqlite:
sqlite3:
srm:
srtp:
ssdp:
ssh:SSHIETF I-D[draft-ietf-secsh-scp-sftp-ssh-uri] (RFC 3986)
ssh2:
sshftp:
ssl:SSL非標準PHP 4.3+
sssp:
standfm:
stats:
steam:Half-Life Protocol (+ Steam)非標準
storage:GNOME蓄積域
ms-store:
stream:満期 (IETF I-D)[draft-fujikawa-stream-uri] (RFC 2396)
subethaedit:
subl:
sublime:
svn:
svn+file:非標準KDE
svn+http:非標準KDE
svn+https:非標準KDE
svn+rsh:
svn+ssh:
svn+svn:
swappedout:
swift:
swipemint:Swipemint
sybase:
sylfeed:Sylfeed
syncml:SyncML名前空間OMA 規格SyncML
sysimage:非標準Windows
syslog:
system:非標準KDE
t120:T.120満期 (IETF I-D)[draft-cordell-sg16-conv-url] (RFC 1738), [W3CLIST]
tahoe:
tag:
tagmanager.c.com.linecorp.lineat:
tann:
tar:非標準KDE
tar+file:
tar+ftp:
tar+http:
task:非標準Forrest
taskpaper:
x-taskpaper:
tbz2:tar+bzip2非標準, IANA登録
tcl:
tclive:
tcp:
tcp+ssl:
tcprelay:
tcviewer:
tdb:
tdl:型付データ表記
vnd.sun.star.tdoc:
teamspeak:
tee:
tel:
tel-av:テレビ電話IANA 未登録, 非標準[iモード]
telephone:[W3CLIST]
telnet:Telnet セッションIETF 提案標準, IANA 登録済RFC 1630, RFC 1738, RFC 4248 (RFC 3986), [IANAREG]
telprompt:
temp:非標準WinIE
textforce:
tftp:
tgz:
thaligroup:
thehitlist:
theme:非標準, IANA登録HTMLayout
themes:非標準
thismessage:そのメッセージIETF 標準化過程, IANA 登録済RFC 2557, IANAREG
thtp:THTPIETF I-D, IANA 登録
thumbnail:非標準KDE
timepage:
tip:TIPIETF 提案標準RFC 2371 (RFC 1738 {不適合}, RFC 2396 to be), [IANAREG]
tivo:
tls:
tmp:
tn3270:TN3270IETF 提案標準 (予約), IANA 登録済 (予備)RFC 1630, RFC 1738 (予約), IANAREG (予備)
toc:目次未登録, 非標準GNOME
todo:未登録, 非標準Forrest
token:
tomtomhome:地理的位置uri-review に提案
ms-tonepicker:
topic:
tor:
tor+http:
trash:
hrn:階層的資源名満期 (IETF I-D), IANA 登録draft-pstickler-hrn
tp:HTTP非標準, IANA 登録 → http:2ch
ttp:HTTP非標準, IANA 登録 → http:2ch
ttps:HTTP over SSL/TLS非標準, IANA 登録 → https:2ch
tudou:Tudou
tumblr:
tv:TVIETF 情報提供 RFC, IANA 登録RFC 2838 (RFC 2396), [W3CLIST]
tweetbot:Tweetbot
tweetie:Tweetie非標準
com.atebits.tweetie2:Tweetie
com.atebits.tweetie2+2.0.0:Tweetie
com.atebits.tweetie2+*:Tweetie
tweetings:Tweetings
tweetingslite:Tweetings
twit:Twittelator非標準
twitbird:TwitBird非標準
twitbirdfree:TwitBird非標準
twitbirdpro:TwitBird非標準
twitterfon:Echofon非標準
twitterfonpro:Echofon非標準
twitterrific:
twodo:
txmt:
uc-url:
uddi:
udf:
udg:
udp:
udprelay:
udp6:
udplisten:
ugomemo:
um:
uml:
uml+unix:
uml+ssh:
uml+tcp:
unix:
unreal:
unsv:
upnp:
uri:URI満期 (IETF I-D), IANA 登録draft-pstickler-uri
url:
urn:
x-urn:
ut2004:
upnp:
uuid:
uwsgi:
v3m:
var:
vbox:
vbox+unix:
vbox+ssh:
vbox+tcp:
vbscript:
vcard-temp:
vcd:
vcs:
vdo:
vemmi:
ventrilo:
vivaldi:
vidaud:AV
video:動画W3C 会議での提案
videos:
videotex:videotex満期 (IETF I-D), IANA 登録済 (歴史的)draft-mavrakis-videotex-url-spec, [W3CLIST], draft-mavrakis-videotex-url-spec, IANAREG (歴史的)
view-cache:
view-rss:RSS非標準, IANA 登録NewsMonster
view-source:ソース表示非標準, IANA 登録[W3CLIST], Mozilla, Microsoft
viewsource:非標準, IANA登録 → view-source:
virtual:
vlc:
x-vloc:非標準, IANA 登録Venkman
vmwareplayer:
vmwarews:
vmwarews+ssh:
vmwarews+tcp:
vnc:
vnd.ms.radio:非標準, IANA 登録Microsoft
voc:語彙満期 (IETF I-D), IANA 登録 [draft-pstickler-voc]
voice:
voicemail:
vpx:
vrchat:
vrmlscript:
vss:Visual SourceSafe
vstfs:
vtel:テレビ電話非標準, IANA 登録[Vodafone]
wais:
ms-walk-to:
wallet:Microsoft Wallet
wap:
web+*:
web+mastodon:
vnd.sun.star.webdav:
webkit-fake-url:
wcap:
x-wdic:
web3s:
web3sbase:
webcal:非標準, IANA 登録Mozilla, KDE
webcals:
webdav:
webdavs:非標準, IANA 登録KDE
webhub:
webpack:
x-web-search:
webster:
vnd.sun.star.wfs:
whatis:
who:非標準, IANA 登録RFC 2345
whodp:非標準, IANA 登録[W3CLIST]
whois:WHOIS非標準, IANA 登録Protozilla
whois++WHOIS++廃止 (IETF 情報提供 RFC), 満期 (IETF I-D), IANA 登録RFC 1630, [draft-ietf-asid-whois-url] (RFC 1738), [W3CLIST]
whoosh:
whttp:
whttps:
widget:WidgetsW3C ED, IANA 登録Widgets 1.0
winnytp:
winscp-ftp:
winscp-ftps:
winscp-ftpes:
winscp-http:
winscp-https:
winscp-scp:]]
winscp-sftp:
withever:withEver
wmq:WebSphere MQ
wordpress:
workflow:
wpn:
ws:
wsj:
wsman:Web Services for Management非標準, IANA 登録WS-Management
wss:
wtai:
www:非標準, IANA 登録Emacs/W3
wxp:
wyciwtg:非標準, IANA 登録Gecko
wysiwyg:
x:
x-*:
xalan:Java クラス非標準Xalan
xbls:[Microsoft]]
xdbc:
xen:
xen+unix:
xen+ssh:
xen+tcp:
xfire:
xindice:
xmldb:
xmlns:XML名前空間満期 (IETF I-D)draft-pstickler-xmlns
xmlrpc.beep:
xmlrpc.beeps:
xmlsocket:
xmpp:
xapian:
xpath:XPath非標準libferris
xri:
xrt:
xrts:
xsltfs:
xtd:
x-exec:
x-ferris:非標準, IANA 登録libferris
x-internal:
x-schema:
xweb:
xxe-config:非標準XXE
xxxx:
ms-yellowpage:
yjcarnavi:
ymsgr:
youtube:
vnd.youtube:
yt:
z39.50:Z39.50廃止 (IETF 提案標準 (予約)), IANA 未登録RFC 1738 (予約)
z39.50s:Z39.50 セッションIETF 提案標準, IANA 登録済RFC 2056 (RFC 1738), [IANAREG]
z39.50r:Z39.50 取出しIETF 提案標準, IANA 登録済RFC 2056 (RFC 1738), [IANAREG]
zeroconf:非標準, IANA 登録KDE
zim+file:
zip:Zip非標準, IANA 登録KDE
zippy:
zk:
zlib:zlib非標準, IANA 登録, 時代遅れ →compress.zlib:PHP 4.0.4〜4.2.3
%D9%82%D9%87%D9%88%D8%A9:HTCPCP,IETF 情報提供 RFC, IANA 登録RFC 2324
zune:[Microsoft]
%E5%92%96%E5%95%A1:HTCPCP,IETF 情報提供 RFC, IANA 登録RFC 2324
%CE%BA%CE%B1%CF%86%CE%AD:
%E0%A4%95%E0%A5%8C%E0%A4%AB%E0%A5%80:
%E3%82%B3%E3%83%BC%E3%83%92%E3%83%BC:
%EC%BB%A4%ED%94%BC:
%D0%BA%D0%BE%D1%84%D0%B5:
%E0%B8%81%E0%B8%B2%E0%B9%81%E0%B8%9F:

構文

[203] 一般には http:// のように特徴的な :// の記号列で知られていますが、 //authority が続くことを意味しています。 authority がない URL には // が付きません。

大文字と小文字

  • [4] 大文字と小文字は、元々は全て小文字が正しいとされていました。現在でも小文字しか通らない実装が残っています。
  • [5] しかし、その後、実装は大文字も受け入れるべきとかに緩められていっています。今の主流の実装は小文字化してから評価します。
  • [6] この傾向の元、比較的新しめの scheme の定義では大文字・小文字の区別をしないことを要求していたりもします。
  • [7] 従って、現在では scheme 名の大文字・小文字の区別は消滅したが、小文字にした方が無難といえるでしょう。
  • [8] ところで、中には %4Baffee のように、大文字・小文字の区別に意味があるために URI符号化を必須としているものもあります [RFC 2324]。
  • [9] >>8 でもまあ無粋なことを言っちゃうと、 URI 的には Kreserved じゃないから、 %4BaffeeKaffee は同等で、大文字・小文字の同一視を認めるとすると結局 kaffee なんだけどね。

[16] clsid: のように、全部大文字で書くことがかなり多い scheme もあったりします。

分類

[108] 次の分類があります。

文脈

[17] URL scheme 名は、 URLURL から派生した起源などの構文の他に、 次の場面でも用いられます。

[162] 項組起源scheme >>161 は、 起源のうちの URL scheme の部分を表しています。

項組起源参照。

相対 URI 参照

URL scheme とプロトコル

[70] 多くの URL scheme は対応するプロトコルが存在しています。

[71] 例えば http:HTTP over TCP に対応しています。

[72] 対応するプロトコルがある場合の多くは HTTP GET に相当する操作が存在していて、それを実行して結果を取得することを URLdereference (解参照)、retrieve などと呼ぶことがります。

[73] 例えば ftp: では FTP で指定されたファイルRETR することを指していると思われます。

[74] しかし対応するプロトコルがあっても、その性質上、 GET 相当の操作が存在しないことがあります。

[75] 例えば mailto:メール宛先メールの作成操作を表しています。 電子メールプロトコルと対応関係にありますが、そのプロトコルの操作と直接関連付けられてはいません。

[76] tel:電話番号を表していて、 電話プロトコルと対応関係にありますが、 GET に相当する操作はありません。

[77] telnet:telnet プロトコルによって接続することを表しています。 しかし GET に相当する操作ではありません。

[78] 特定のプロトコルと関連付けられていない URL scheme もあります。

[79] urn: は特定のプロトコルと関係しないただの名前を表しています。

下位層プロトコル

[80] 同じアプリケーションプロトコル下位層プロトコルが異なるものが使われる場合があります。

[81] 例えば HTTP は、 HTTP over TCPHTTP over TLS over TCP の2種類がよく使われています。

[82] プロトコルと関連付けられている URL scheme の多くは、特定の下位層プロトコルを想定しており、 複数存在するときはそれぞれ別の URL scheme が用意されています。

[84] 素の TCP の場合と TLS/SSL over TCP の場合がある時は、 TLS/SSL の側は末尾に s を付けるのが一般的です。

[83] 例えば HTTP には TCP 用の http: と、 TLS over TCP 用の https: があります。

[98] dns: のように、 s で終わっても TLS を使っていない URL scheme もあります。

[86] UDP などを rtspu: のように表した例もあります。

[85] IETF では iris.beep:iris.xpc: のように . 区切りで示す例がいくつもあります。

[100] z39.50r: のように、 . が含まれていてもプロトコル階層と関係ないものもあります。

[87] 世間では svn+ssh:openvz+unix: のように + 区切りで示した例もあります。

[99] whois++: のように、 + が含まれていてもプロトコル階層と関係ないものもあります。

[190] ffmpeg は、 URL の前に crypto: または crypto+ をつけることで、暗号化されたデータを表しています (cryoto+ 参照)。 crypto: は単独の URL scheme ですし、 crypto+crypto+http のような階層化された URL scheme と解釈できます。

[88] scheme 中の --, -+, +-, ++ に意味を持たせて体系化しようとした提案もありましたが、受け入れられなかったようです >>89

web+*:

[101] web+ から始まる URL scheme 名群は、 registerProtocolHandler によって Webアプリケーションが登録して利用する URL scheme となっています。

fb*:

[102] fb から始まり数字列が続く URL scheme 名群は、 スマートフォンアプリFacebookアプリと連携するために利用しています。

[103] 本来は当該アプリFacebook連携機能を実装する手段として用いるものですが、 そのアプリが他に手段を用意していない時に第三者がそのアプリを起動したり、 特定の機能を呼び出したりするために流用されることがあるようです。

[104] 数字列部分は (Facebook 内にはアプリとの対応データベースがあるのでしょうが) 第三者にとっては意味のない文字列とみられます。

x-*:

[187] RFC 1630 時代は、 x- から始まる URL scheme私用とされていました。この規定はなぜかその後削除されています。

[188] しかしその後もいくつか x- から始まる URL scheme が知られています。

[90] かつて RFC 2717URL scheme に「 (tree) 」 という概念を導入し、 IETFプロトコルIETF木に収容し、 それ以外は vnd-foo-bar のような - で階層化された名前空間に収容することを企てていました >>91RFC 2717IETF木 (IETF tree) を規定していました。 IETF木URL scheme 名では - の利用が禁止されていました >>91

[92] draft-king-vnd-urlschemeRFC 2717 に基づき vnd- (企業利用目的) と prs- (個人利用目的) を確立しようと試みていました。

[94] このようなを導入しようとするのはこの時期の IETF で流行していた方式で、他に MIME型で採用されています。

[193] URI.ARPA は、登録対象を IETF木に限定していました。


[96] しかしこの方法は支持を集められなかったようで、 I-DRFC になることがなく、結局は使われることなく RFC 4395 により廃止されています >>95

[97] なおこの当時 IANA には - を含む URL scheme は登録されていませんでしたが (現在は登録されています)、現実にはかなり前から view-source: など - を含む URL scheme が存在していました。 IETFIANA登録簿に登録されていない現実世界の URL scheme の存在を完全に無視していました。

逆ドメイン名

[136] RFC 4395私的URL scheme について、逆ドメイン名. のかわりに -区切り文字に使ったものを名前とすることを推奨 (encourage) していました >>128

- をそれ以外で使うことを禁止はしていませんでした。

[140] RFC 7595 は (置き換えない) 逆ドメイン名そのものを使うべき >>135 としています。それ以外での用途で . を使ってはならない >>135 ともしています。

[141] しかし私的名前を使う場合であっても登録することが強く推奨 (strongly encouraged) されています >>135


[142] 実際には URL scheme では逆ドメイン名はほとんど使われていません。 若干数はあります。衝突回避の方法としては vendor prefix の方がむしろ使われていますが、 それもわずかに過ぎません。

[143] . はどちらかといえばプロトコル階層の意味で用いられています。 そのような意味の URL schemeIANA登録簿にもいくつか既に登録されています。 この慣習を否定するような規定を敢えて加えた意図は不明です。 IETFIETF/IANA 外の現実世界の用法を無視するのはいつものことだとしても、 IETF 自身の過去の仕様と矛盾する制限を加えるのは不思議です。

衝突

[173] URL scheme 名は、衝突する可能性があります。

[129] 公式には URL scheme にはIANA登録簿 (>>121) がありますが、 破綻状態で、 URL scheme の衝突回避の役目は果たしていません。 (>>90) や逆ドメイン名 (>>136) もほとんど使われていません。

[168] 一方で現代的なほとんどのプラットフォームWebブラウザーは、 任意のネイティブアプリケーションWebアプリケーションURL scheme を登録できる機能を提供しています。 (プラットフォームごとの若干の制約はあるとはいえ) 実質的に URL scheme名前空間は完全に開放されているのが現状です。

[169] このような状況で、異なる意味・用法で同名の URL scheme が現れるのは必然です。 00年代初期には既に衝突例が複数見られました (>>25>>26)。 もしかすると90年代に既にあったかもしれません。

[170] 00年代末にはスマートフォンアプリ、とりわけ iOSアプリで標準的で簡易なプロセス間通信の手段として普及し、 URL scheme が爆発的に増加しました。それに伴い衝突例も増えました。

[166] 更には、悪意を持って敢えて他のアプリケーションURL schemeプラットフォームに登録し、利用者の操作を妨害したり、情報を漏洩させたり、 その他何らかの利益を得たりしようとする事例が複数報告されています。 こうした攻撃は、 URL Scheme Hijacking と呼ばれています。

[175] プラットフォームは、極めて標準的な URL scheme (https:about: など) を安易にアプリが登録することを防ぐべきです。

[183] 標準的な URL scheme であっても、 mailto: のようにアプリが登録することをむしろ (ある程度は) 推奨するべきものもあります。

[176] プラットフォームは、それ以外の URL scheme についても、 利用者が気付かないうちに異なるアプリに登録が切り替わることを防ぐべきです。

[177] 例えば常に最後にインストールしたアプリが優先されるような状態だと、 フィッシングにより悪意あるアプリインストールさせ、 既存のアプリを使った処理を乗っ取ることが容易になります。

[178] 新しくインストールされたアプリが既存のアプリと衝突する URL scheme を登録したら、その初回利用時にどちらを使うか利用者に選択させれば、 少なくても利用者が知らないうちに悪意あるアプリに差し替わることは防げます。

[174] アプリマーケットは、技術的に可能であれば、 URL scheme を不審な方法で利用するアプリの登録を拒絶するべきです。

[179] 例えば URL scheme を数十個も登録するアプリは、明らかに不審です。

[171] 任意の URL を入力として受け取るアプリケーション、 とりわけ UGCWebアプリケーションなどは、 悪意ある利用者が他の利用者に攻撃する手段とすることを防ぐため、 既知の標準的な URL scheme (https:mailto: など) 以外の URL scheme をすべて拒絶すること (ホワイトリスト方式) を原則とするべきです。 自動リンクする URL schemeホワイトリスト方式とするべきです。

[172] Webサイトからネイティブアプリへの誘導などの目的で特定の既知の標準的でない URL scheme を用いる場合も、悪意あるアプリが登録された状態で情報が漏洩することがないよう、 十分配慮するべきです。例えばアカウントの登録や OAuth のフローの後に利用者ネイティブアプリに戻って欲しい時に、 秘密のトークンURL に含めたりしてはいけません。フィッシングにも注意する必要がありそうです。

[180] プラットフォームは、より確実に送信先を指定できる IPC の手段を用意するべきです。アプリケーションは、そのような手段が存在するなら、 可能な限りそちらを用い、 URL scheme に頼ることは避けるべきです。

[189] プラットフォームによっては、 独自の URL scheme ではなく、 標準的な URL scheme の一部をアプリケーションに関連付ける機能を提供しています。 Example SNS のアプリケーションは、 example: を登録する代わりに、 https://www.example.com/ で始まる URL を登録できます。 この方法なら、 Example SNS アプリケーションがインストールされていない環境では Webブラウザーを起動し、インストールされていればアプリケーションが起動するように自動的になりますし、 プラットフォームアプリマーケットの審査が機能している限り、 悪意ある他のアプリケーションが起動してしまうことを防げます。

[181] アプリケーションは、独自の URL scheme を定義する場合、 漏洩するべきでない情報を指定できるようにするべきではありません。

[182] 例えば合言葉や秘密のトークンを指定できるようにするべきではありません。

[109] [URLスキームを利用される方向け]気をつけた方が良い?アプリ ( スマートフォン ) - The theoryの戯言@ブログ - Yahoo!ブログ ( 版) http://blogs.yahoo.co.jp/thetheorier/17302303.html

ただこのアプリは普通じゃありませんでした, なんと297個(2015.02.14時点)もあったんです, それもGoogleやTwitterなど, 他のサードアプリのURLスキームがズラっと並んでいるんですね…

[111] URLスキームでTwitterを開くと3dtuningが起動します。 これは3dtuningが... - Yahoo!知恵袋 ( 版) http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12142931017

このアプリには画像の通り4つURLスキームが登録されており, 4つ目に twitter: がありますね.

[158] (前半)URLスキームを扱う上で気をつけたいあるアプリ - もう一人のY君 ( 版) http://thetheorier.hatenablog.com/entry/2015/05/03/143309

先日紹介した時点ではURLスキームが257点という, この時点でも異常な数なんですが, 2.2で確認したところ, なんと938点に爆増していました…

Yahoo!ブログの方でも書いたんですが, その大半は「既にある別のアプリのURLスキームと同一」であるため, 場合によってはそちらのアプリをランチャなどで開きたいのに, このフリマアプリが起動してしまう…という致命的な問題をはらんでいます.

[165] 「ポケモンGOマップ」アプリがモンストが開くはずのURLスキームを乗っ取り全画面広告に転送してくるので注意 () http://did2memo.net/2016/08/14/pokemon-go-pokemon-go-map-url-scheme/

ポケモンの出現位置をリアルタイムで表示する地図アプリ「ポケモンGO マップ - リアルタイムでポケモンを探そう!」が人気で、AppStoreの無料総合ランキング上位に位置しています。

しかし、このアプリについて、「モンストマルチ掲示板が乗っ取られる」「モンストマルチのLINE募集機能が使えなくなる」などとレビューされています。

[167] 【報告】ポケモンGOマップの大量のURLスキームが意図的であると思わせる事実 - もう一人のY君 () http://thetheorier.hatenablog.com/entry/pokemongomap-urlscheme

リリースしているアプリのURLスキームの数はいづれも3桁という通常ではありえない数, かつ他アプリと競合しておりそちらの起動を妨げる可能性がある

デベロッパーの実態が掴めない(対応サイトがない, あっても活動している節がない)

URL scheme とアプリケーション

[196] 多くのプラットフォームは、 URL schemeアプリケーションを関連付ける機能を有しています。

[197] 古くはアプリケーション (Webブラウザー) ごとに、未対応 URL scheme を扱うヘルパーアプリケーションを設定する機能を有していました。 (例えば LynxNetscape Navigator にそのような機能がありました。)

[198] Internet Explorer はこれを Windows の機能としました。 以後他の OS も類似の機能を搭載し、 WebブラウザーOS の機能を使うようになりました。

[199] iOSAndroidネイティブアプリケーションIPC 機能として活用しています。

[191] WinSCP は既存の URL scheme の前に winscp- をつけることで、 他のアプリケーションではなく WinSCP で開くべきことを指定できるようにしています。

IANA 登録簿

[121] URL scheme には IANA登録簿があります。

[120] URI scheme が IANA に登録されるまでには、 おおむね次の経過をたどります。 (色々の兼ね合いで仔細は異なることがあります。)

  1. 原案が Internet Draft として発行され、 (関係する IETFWGietf-uri などで) 議論される
  2. Internet Draft が十分な段階に達すれば、 IESG に提出される
  3. IESG の評価で問題が無ければ、 Internet DraftRFC Editor に送られる
  4. IESG を通過した Internet Draft を (RFC として発行されるものとして) 参照しつつ IANA の登録簿に掲載される
  5. RFC が発行される
  6. IANA の登録簿が Internet Draft 参照から RFC 参照に改められる

[151] 一旦 IESG で承認された後は後戻りすることはありませんが、 各段階のタイムラグがかなりあります。 (RFC EditorIANA は随分と忙しいらしいです。)

[152] 新しい URI scheme を使いたい時は、 IESG で承認されれば (承認したと ietf-announce で告知されれば) RFC の発行を待つ必要はありません。

[153] 前述の通り、 IANA登録簿IETF が規定する URI scheme + α 程度しかカバーしておらず、その実質的な効力は限定的なものです。 IANA登録簿に登録されているかどうかに基づき何らかの判断 (ある URL が適切か否かなど) を行うのは不適切と言わざるを得ません。

[155] 予備的な登録ができるようになり、 URL scheme の開発者でない第三者でも登録が可能となったことで、 Dave Thaler が巷で使われている URL scheme を多数登録しています。 しかしそれも実際に使われている URL scheme のごく一部に過ぎません。 登録の雛形には各 scheme の一応の説明はありますが、開発元の公式なものではありませんし、 その後本登録に向けた動きがあるわけでもなく、 scheme 名の (IETF における) 予約程度の意味しかなさそうです。

[154] 歴史の項も参照。

API

[160] location.protocol など、 DOM API では protocol と呼ばれています。

歴史

初期

[28] 1994年頃Dan ConnollyURI schemeMIME message/external-bodyaccess-typeと共通にするか、少なくても一部の定義を共有しようと考えていたようです。 興味深いことにfile:非推奨とされ、 MIMEと同じlocal-file:を採用しています。

IANA 登録簿の新設

[115] RFC 2717 (BCP 35) は IANA登録簿を新設し登録手続きを規定するものでした。 また RFC 2718URL scheme に対する指針を述べたものでした。

[118] RFC 2396 (URI) の出版後であるにも関わらず、なぜか RFC 2717URL scheme の登録手続き >>116 を規定していました。

[119] RFC 2717の概念を導入しました (>>90)。

未登録URI schemeは有害である

[23] URI schemeは数多く存在するにもかかわらず、公式なIANA登録簿に登録されているのはそのうちのほんのわずかです。 これは、相互運用性上非常に問題です。

[24] 同じ目的の複数のURI scheme: 多く存在するURI schemeの中には、実際には同じ目的のものがあります。 どちらかにしか対応しない実装があって相互運用性の問題が発生したり、 複数個の (たぶん構文も異なる) URI scheme へ対応しないといけないという実装上の負担になったりします。

[25] 同じ目的・同じ名前の構文の異なるURI scheme: どこかで誰かが思いついたものと同じものを、 それとは独立に別の誰かが思いつくことはよくあります。 しかしURIの構文まで完全に一致することは、なかなかありません。 そうして異なる構文が乱立することになります。 まったく違う構文で見分けられるならまだ良い方で、 構文上区別がつかないこともあり得ます。

例えば、callto: URI scheme電話の掛け先を表すURI schemeとして複数の実装がありますが、異なる構文であり、また、電話の通信プロトコルも異なっています。

[26] 違う目的の同じ名前のURI scheme: URI schemeの名前が一般的なものだと、 別の目的のURI schemeが同じ名前になってしまったりもします。

例えば、info: URI schemeは、 GNU Texinfo形式のマニュアルを識別するためにGNOMEKDEで採用されていますが、両者の構文が異なっています (>>25 の実例)。更に悪いことに、図書館業界でもURN的に使用しています (>>26 の実例)。幸い、3つはすべて構文的に区別できます。

図書館業界の構文はIETFの正規の手続きによりIANAに登録されました。 実装の利用数で数えれば、おそらくはGNOMEKDEの方式の方が多く使われていたでしょう (URIの使用数では分かりませんが)。にも関わらず、GNOMEKDEの関係者が登録を怠ったために、このような事態に陥ってしまいました。

RFC 4395

[123] RFC 4395RFC 2717/RFC 2718 を統合・改訂して改めて IANA登録簿の登録手続きを規定するものでした。

[125] 前版とは異なり、 URL scheme ではなく URI scheme となっています。 locator名前との区別は不明瞭なものであると考えるのが当世の風潮であること >>124 が理由とされています。

[126] 前版で導入されたは使われなかったとして廃止されています。

[127] 従来の登録は「永続的 (permanent) 」状態とされ、 新たに「予備 (provisional) 」や「歴史的 (historical) 」 の状態での登録も可能となりました。

[131] RFC 4395BCP 115 として出版されましたが >>124RFC 2717BCP 35 だったことが後に発覚し、 BCP 115 は廃止されて BCP 35 となっています >>130

RFC 7595

[133] RFC 7595 (BCP 35) は、RFC 4395 を改訂して三度 URI scheme の登録手続きを定義するものです。

[134] IETF における URI/IRI への関心の低下のためか完成まで数年を要しました。 その間 WHATWGURL Standard が出版されるなど URL を取り巻く状況は大きく変化しており、 そのような動きとの関係が問いただされることもありましたが、 IETF 外での動きは関係ないということなのか、影響を与えられることなく RFC となりました。

[137] example: URL scheme が新たに定義されています。

[138] 前版の「永続的」、「予備」、「歴史的」はそれぞれ別の IANA登録簿となっていましたが、 この改訂により1つの登録簿の「状態」に改められました。更に状態として 「Pending Review」が追加されています。 >>132

[139] 世間での URL schemeIANA登録簿の乖離が激しくなって久しいですが (というか開設当初からですが...)、今回の改訂でも抜本的な改革は行われなかったようです。

実装

[19] URL Schemes Supported in Lynx http://lynx.isc.org/release/lynx2-8-3/lynx_help/lynx_url_support.html

[15] URL Loading Systemを拡張する http://homepage3.nifty.com/kimuraw/misc/nsurlprotocol.html

Mac OS X の URI system。

メモ

[18] UR* new schemes considerations http://www.apps.ietf.org/url-schemes.html (Last modified: Mon Sep 22 09:14:58 1997)

[21] Architecture of the World Wide Web, Volume One http://www.w3.org/TR/webarch/#URI-scheme

[22] UriSchemes - ESW Wiki http://esw.w3.org/topic/UriSchemes

[20] ちょっとしたメモ - 過剰なURIスキームは有害である http://www.kanzaki.com/memo/2004/02/28-3

[27] URI schemeは、歴史的事情によりURL schemeとも呼ばれます。

URL protocolURLプロトコルURL schemaURLスキーマURI schemaなどとも呼ばれますが、それは間違いです。

[29] IANA | URI Schemes http://www.iana.org/assignments/uri-schemes.html

いつのまにか HTML 化されてました。 (名無しさん 2006-06-17 09:01:03 +00:00)

[30] A prayer to the (demi-)gods of URI - O'Reilly ONJava Blog (Robert Cooper 著, 2007-07-13 20:41:02 +09:00 版) http://www.oreillynet.com/onjava/blog/2006/11/a_prayer_to_the_demigods_of_ur.html

[31] IEBlog : Enriching the Web Safely: How to Create Application Protocol Handlers ( 版) http://blogs.msdn.com/ie/archive/2007/07/18/enriching-the-web-safely-how-to-create-application-protocol-handlers.aspx (名無しさん)

[32] Registration timing of new URI schemes (Eran Hammer-Lahav 著, 版) http://lists.w3.org/Archives/Public/uri/2009Aug/0047.html

[33] - App Lookup ( 版) http://applookup.com/

[34] IPhone URL Schemes - akosma wiki ( 版) http://wiki.akosma.com/IPhone_URL_Schemes

[35] URLスキームについて|Enjoy iPhone Life ( 版) http://ameblo.jp/moco-cchi/entry-10811253150.html

[36] [whatwg] Blacklist for regsiterProtocolHandler() ( ( 版)) http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-April/031220.html

[37] IRC logs: freenode / #whatwg / 20110413 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20110413

[38] [whatwg] Blacklist for regsiterProtocolHandler() ( ( 版)) http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-April/031294.html

[39] New Uniform Resource Identifer Schemes Considered 99% Harmful ( ( 版)) http://infomesh.net/2001/09/urischemes

[40] [whatwg] registerProtocolHandler() whitelist ( ( 版)) http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-August/032974.html

[42] Web Applications 1.0 r7291 Whitelist another scheme. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7290&to=7291

[43] Web Applications 1.0 r7294 Add ssh and sip to the whitelist. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7293&to=7294

[44] Web Applications 1.0 r7323 Explain why gopher isn't on the list ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7322&to=7323

[45] IRC logs: freenode / #whatwg / 20121124 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20121124

[46] IRC logs: freenode / #whatwg / 20121128 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20121128#l-1299

[47] IPhone URL Schemes - akosma wiki ( ( 版)) http://wiki.akosma.com/IPhone_URL_Schemes

[48] IRC logs: freenode / #whatwg / 20130507 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20130507

[51] URL Scheme Intro for App Developers – Contrast Tech Support ( ( 版)) http://help.contrast.co/hc/en-us/articles/200865293-URL-Scheme-Intro-for-App-Developers

[52] handleOpenURL: Shared Interapp Communication on iOS ( ( 版)) http://handleopenurl.com/

[53] パラメータ有りiPhoneアプリのURLスキーム一覧 ( (nasimeya 著, 版)) http://nasimeya.blog.fc2.com/blog-entry-820.html

[54] 総計290個以上掲載!iPhoneアプリのURLスキーム一覧 ( (nasimeya 著, 版)) http://nasimeya.blog.fc2.com/blog-entry-157.html

[55] Zwapp ( ( 版)) http://schemes.zwapp.com/?page=218

[56] iPhoneアプリのURLスキーム @ ウィキ - ページ一覧 ( ( 版)) http://www18.atwiki.jp/iphone-urlscheme/list

[57] Windows Phone 8 用の組み込みアプリを起動するための URI スキーム ( ( 版)) http://msdn.microsoft.com/ja-jp/library/windowsphone/develop/jj662937(v=vs.105).aspx

[58] URI schemes for launching built-in apps for Windows Phone 8 ( ( 版)) http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj662937(v=vs.105).aspx

[59] Reserved file and URI associations for Windows Phone 8 ( ( 版)) http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj207065%28v=vs.105%29.aspx#BKMK_Reservedprotocolnames

[60] URI Association Schemes List - Nokia Developer Wiki ( (Nokia 著, 版)) http://developer.nokia.com/community/wiki/URI_Association_Schemes_List

[61] 用途のわからないURLスキームを解説 « 当サイトは reliphone.jp に移転しました。 ( ( 版)) https://reliphone.wordpress.com/2014/01/04/unknownurlschemes/

[63] iOS App Programming Guide: Advanced App Tricks ( ( 版)) https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AdvancedAppTricks/AdvancedAppTricks.html#//apple_ref/doc/uid/TP40007072-CH7-SW50

[110] [7100超]iPhone URLスキーム -The theoryの戯言[毎週日曜更新] ( 版) http://www.geocities.jp/thetheorier/iphone_URLscheme.html

[112] <data> | Android Developers ( 版) http://developer.android.com/guide/topics/manifest/data-element.html

Scheme matching in the Android framework is case-sensitive, unlike the RFC. As a result, you should always specify schemes using lowercase letters.

[113] DUPLICITY(1) manual page ( 版) http://duplicity.nongnu.org/duplicity.1.html#sect7

Scheme (protocol) access may be provided by more than one backend. In case the default backend is buggy or simply not working in a specific case it might be worth trying an alternative implementation. Alternative backends can be selected by prefixing the scheme with the name of the alternative backend e.g. ncftp+ftp:// and are mentioned below the scheme’s syntax summary.

[114] Bazaar Custom URL Schemes in Launchpad ( 版) https://launchpad.net/bzr-custom-url-schemes

Bazaar plugin adding the ability to create custom short names for URLs. This is similar to the bookmarks plugin, but allows a slightly more flexible approach.

This gives the ability to create a shortened version of the start of a URL. For example, if it is desirable to retrieve branches stored

on a server with sftp, you could shorten:

bzr branch sftp://my.username@server.com/path/to/bazaar/projects/work/myproj

to:

bzr branch serv:work/myproj

[122] RFC 2718 - Guidelines for new URL Schemes ( 版) https://tools.ietf.org/html/rfc2718#section-2.5

Any scheme starting with the letters "U" and "R", in particular if it

attaches any of the meanings "uniform", "universal" or "unifying" to

the first letter, is going to cause intense debate, and generate much

heat (but maybe little light).

Any such proposal should either make sure that there is a large

consensus behind it that it will be the only scheme of its type, or

pick another name.

[128] RFC 4395 - Guidelines and Registration Procedures for New URI Schemes ( 版) https://tools.ietf.org/html/rfc4395

Avoid using names that are either very general purpose or associated

in the community with some other application or protocol. Avoid

scheme names that are overly general or grandiose in scope (e.g.,

that allude to their "universal" or "standard" nature when the

described namespace is not.)

(In

the unfortunate case that there are multiple, different uses of

the same scheme name, the IESG may approve a request to modify an

existing entry to note the separate use.)

[144] 68406 – (protozilla) W3C CUAP: Allow registration of new URI schemes ( 版) https://bugzilla.mozilla.org/show_bug.cgi?id=68406

[145] SchemesExtension - Mercurial ( 版) https://mercurial.selenic.com/wiki/SchemesExtension

[146] danielamitay/iHasApp ( 版) https://github.com/danielamitay/iHasApp

This project was made as a "proof of concept" demonstration of how to detect apps installed on an iOS device, from early 2011. Since then, it has been used extensively in many apps, to the point where Apple made the decision to ban the excessive use of -canOpenURL:, the method which iHasApp relies upon to determine app installation. As a result, using a list of URL schemes for app detection is no longer a viable method.

[147] Zwapp ( 版) http://zwapp-blog.tumblr.com/

[148] Detailed iPhone App IPA Statistics — Daniel Amitay ( 版) http://danielamitay.com/blog/2011/5/9/detailed-iphone-app-ipa-statistics

Only 27% support URL Schemes (inter-app communication);

18% of URL Schemes are for the Facebook iOS SDK;

[149] A List of iOS URL Schemes - The Joy of Hack (Aijaz Ansari 著, 版) http://aijazansari.com/2013/07/16/a-list-of-url-schemes/

[156] [rfc-i] BCP 35 and BCP 115 and Auth48 and clerical errors ( 版) https://www.rfc-editor.org/pipermail/rfc-interest/2015-April/008855.html

[157] Reference RFC 7595 instead of RFC 4395 · whatwg/html@ce7112b ( 版) https://github.com/whatwg/html/commit/ce7112b2a2fd73f0fbe906dc45679333717e9a0f

[159] Fix #101: always strip U+0009, U+000A, and U+000D · whatwg/url@7b40216 ( 版) https://github.com/whatwg/url/commit/7b40216f809c7fe3c9a1680b5c1b06a771c9ebd8

[163] スマートフォンのブラウザにおけるURLスキームの解釈:That's the Way to GO!:オルタナティブ・ブログ () http://blogs.itmedia.co.jp/jinmsk/2012/07/url-c838.html

iOS5.0以降、Android OS 4.0以降は全部小文字でなければダメ

URLスキームの仕様というよりはブラウザの仕様(*3)により、[○○○://]の○の部分が勝手に小文字に変換されてしまいます。

例えば[<a href="MishukuLand://">]とHTMLに記述した場合、プラウザでは[<a href="mishukuland://">]となってしまいます。何が問題かといいますと、アプリ側では大文字小文字の判別を行っているため、アプリを開くことができなくなってしまいます。

[184] 【iOS10】設定アプリのURLスキームショートカットがウィジェット限定で使える | reliphone ( ()) http://reliphone.jp/ios10-prefsroot/

ただしiOS9までのようにprefs:rootでは一切反応してくれず、Prefs:rootとPを大文字にしないと反応しないという変更がされています。

[185] Editorial: give URL syntax components their own terms (annevk著, ) https://github.com/whatwg/url/commit/451696e4297c4c676fae21dbc926aeafb2477e6c

[186] Adding algorithm "Does scheme-part match another scheme-part?" (#136) (Sun77789著, ) https://github.com/w3c/webappsec-csp/commit/cf6dc08055b3b824623187eb56d35e7c242f2296

[192] Can't get gmail for android to open a custom URL scheme, or an intent:// URL - Stack Overflow ( ()) http://stackoverflow.com/questions/38778618/cant-get-gmail-for-android-to-open-a-custom-url-scheme-or-an-intent-url

[194] RFC 6241 - Network Configuration Protocol (NETCONF) () https://tools.ietf.org/html/rfc6241#section-8.8.3

The :url capability URI MUST contain a "scheme" argument assigned a

comma-separated list of scheme names indicating which schemes the

NETCONF peer supports. For example:

urn:ietf:params:netconf:capability:url:1.0?scheme=http,ftp,file

[201] KDDI au: 技術情報 > オープンアプリ () https://www.au.com/ezfactory/tec/spec/openappli.html

プロトコルスキーマ文字列 (http://、https://) は大文字小文字を区別しません。

[204] 予約済みのファイルと URI スキーム名 - UWP applications | Microsoft Docs (alvinashcraft, ) https://docs.microsoft.com/ja-jp/windows/uwp/launch-resume/reserved-uri-scheme-names#reserved-uri-scheme-names

[206] New Uniform Resource Identifer Schemes Considered 99% Harmful, , http://infomesh.net/2001/09/urischemes