URI scheme
From Wikipedia, the free encyclopedia
A URI scheme is the top level of the URI (Uniform Resource Identifier) naming structure. All URIs and absolute URI references are formed with a scheme name, followed by a colon character, and the remainder of the URI called (in the outdated RFCs 1738 and 2396, but not the current STD 66/RFC 3986) the scheme-specific part. The syntax and semantics of the scheme-specific part are left largely to the specifications governing individual schemes, subject to certain constraints such as reserved characters and how to "escape" them.
URI schemes are sometimes erroneously referred to as "protocols", or specifically as URI protocols or URL protocols, since most were originally designed to be used with a particular protocol, and often have the same name. The http:
scheme, for instance, is generally used for interacting with Web resources using HyperText Transfer Protocol. Today, URIs with that scheme are also used for other purposes, such as RDF resource identifiers and XML namespaces, that are not related to the protocol. Furthermore, some URI schemes are not associated with any specific protocol (e.g. "file:
") and many others do not use the name of a protocol as their prefix (e.g. "news:
").
URI schemes should be registered with IANA, although many non-registered schemes are used in practice. RFC 2717 describes the procedures for registering new URI schemes. RFC 2718 provides guidelines for the development of new URI schemes. Both of these RFCs are currently undergoing revision.
Contents |
[edit] Generic syntax
Internet standard STD 66 (also RFC 3986) defines the generic syntax to be used in all URI schemes. Every URI is defined as consisting of four parts, as follows:
<scheme name> : <hierarchical part> [ ? <query> ] [ # <fragment> ]
The scheme name consist of a letter followed by any combination of letters, digits, and the plus ("+"), period ("."), or hyphen ("-") characters; and is terminated by a colon (":").
The hierarchical part of the URI is intended to hold identification information hierarchical in nature. Usually this part begins with a double forward slash ("//"), followed by an authority part and an optional path. The authority part holds an optional user information part terminated with "@" (e.g. username:password@
), a hostname (i.e. domain name or IP address), and an optional port number preceded by a colon ":". The path part is a sequence of segments (conceptually similar to directories, though not necessarily representing them) separated by a forward slash ("/"). Each segment can contain parameters separated from it using a semicolon (";"), though this is rarely used in practice.
The query is an optional part separated with a question mark, which contains additional identification information which is not hierarchical in nature. Its syntax is not generically defined, but is commonly organized as a sequence of <key>=<value>
pairs separated by an ampersand, e. g. key1=value1&key2=value2&key3=value3
.
The fragment is an optional part separated from the front parts by a hash ("#"). It holds additional identifying information which allows indirect identification of a secondary resource, e.g. a section heading in an article identified by the remainder of the URI.
[edit] Examples
The following are two example URIs and their component parts (taken from STD 66):
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment | _____________________|__ / \ / \ urn:example:animal:ferret:nose
[edit] Official IANA-registered schemes
The official URI schemes registered with the IANA follow.
Scheme | Purpose | Defined by | General format | Notes |
---|---|---|---|---|
http: | HTTP resources | RFC 2616 | generic syntax | |
https: | HTTP connections secured using SSL/TLS | RFC 2817 | generic syntax | |
ftp: | FTP resources | RFC 1738 | generic syntax | |
mailto: | SMTP e-mail messages and content | RFC 2368 | mailto:<address>?header1=value1&header2=value2 example: mailto:jsmith@example.com?subject=A%20Test&body=My%20idea%20is%3A%20%0A |
Headers are optional, but often include "subject"; body= can be used to pre-fill the body of the message. |
file: | addressing files on local or network file systems | RFC 1738 | generic syntax (often appears as file:///path , the 3rd '/' representing the root directory of the local system) |
Unusual in not being bound to any network protocol, and not usable in an Internet context. |
urn: | Uniform Resource Names | RFC 2141 | urn:<namespace>:<specificpart> |
|
data: | inclusion of small data items inline | RFC 2397 | data:<mediatype>;[base64,]<data> |
|
news: | (Usenet) newsgroups and postings | RFC 1738 | news:<newsgroupname> or news:<message-id> |
References a particular resource, regardless of location. |
nntp: | Usenet NNTP | RFC 1738 | nntp://<host>:<port>/<newsgroup-name>/<article-number> |
Referencing a specific host is often less useful than referencing the resource generically, as NNTP servers are not always publicly accessible |
imap: | accessing mailbox through IMAP | RFC 2192 | ||
pop: | accessing mailbox through POP3 | RFC 2384 | ||
pres: | Used in Common Profile for Presence (CPP) to identify presence | RFC 3859 | pres:<address>?header1=value1&header2=value2 |
Similar to "mailto:" |
sip: | used with Session Initiation Protocol (SIP) | RFC 3969 RFC 3261 |
||
sips: | Secure equivalent of sip: | RFC 3969 RFC 3261 |
||
xmpp: | XMPP (Jabber) | RFC 4622 | xmpp:<address>/<resource>?<query> |
xmpp://... is also allowed, xmpp:<address> is the simplest form |
ldap: | LDAP directory request | RFC 2255 RFC 4516 |
||
tel: | used for telephone numbers | RFC 3966 RFC 2806 |
tel:<phonenumber> |
|
fax: | used for telefacsimile numbers | RFC 2806 | fax:<phonenumber> |
Seems to be deprecated in RFC 3966 in favour of tel: |
telnet: | used with telnet | RFC 4248 | ||
nfs: | Network File System resources | RFC 2224 | generic syntax | |
wais: | used with Wide area information server (WAIS) | RFC 4156 | ||
gopher: | used with Gopher protocol | RFC 4266 | gopher://<host>:<port>/<item type>/<path> |
|
cid: | accessing body parts inside a message | RFC 2392 | cid:<content-id> |
Used inside a message to refer to other parts of the same message. |
mid: | accessing messages or parts of messages | RFC 2392 | mid:<message-id> or mid:<message-id>/<content-id> |
Used to refer to messages or parts of a message |
snmp: | Simple Network Management Protocol | RFC 4088 | snmp://[user@]host[:port][/[<context>[;<contextEngineID>]][/<oid>]] examples: snmp://example.com//1.3.6.1.2.1.1.3+ snmp://tester5@example.com:8161/bridge1;800002b804616263 |
[edit] Unofficial but common URI schemes
Scheme | Purpose | Defined by | General format | Notes |
---|---|---|---|---|
about: | Displaying product information and internal information | Un-standardised | Widely used by web browsers, sometimes even providing interactive resources | |
aim: | Launching AOL Instant Messenger conversations | AOL | aim:goim?screenname=<screenname>&message=<message> |
|
callto: | Launching Skype call | Skype | callto:<screenname> or callto:<phonenumber> [1] |
Works with current version of Skype with both Firefox, Internet Explorer and Safari |
skype: | Launching Skype call (official) | Skype | skype:<screenname>?<action> |
Official documentation from Skype website |
msnim: | Adding a contact, or starting a conversation in Windows Live Messenger | Windows Live Messenger | msnim:chat?contact=<screenname> |
|
ed2k: | resources available using the eDonkey2000 network | eDonkey2000 | ed2k://|file|<filename>|<hash of hash>|<hash of file>|/ |
Links to servers are also possible, as are additional parameters. Official documentation from eDonkey2000 website |
feed: | web feed subscription | feed:[//]<feedurl> |
||
irc: | Connecting to a server, joining a channel | IETF Draft Old IETF Draft |
irc://<host>[:<port>]/[<channel>[?<password>]] |
"host" may optionally be an IRC network name, assuming the client knows a server associated with the name |
ircs: | Secure equivalent of irc: | IETF Draft | ircs://<host>[:<port>]/[<channel>[?<password>]] |
See irc: |
lastfm: | Launching Lastfm music client | Lastfm | lastfm://globaltags/<genre> or lastfm://user/<username>/<stuff> |
|
magnet: | "magnet links" | Magnet-URI Project | magnet:?xt=urn:sha1:<hash of file>&dn=<display name> (other parameters are also possible) |
Used by various peer-to-peer clients, usually providing the hash of a file to be located on the network. |
mms: | Windows streaming media | mms://<host>:<port>/<path> |
Used by Windows Media Player to stream audio and/or video. | |
psyc: | Used to identify or locate a person, group, place or a service and specify its ability to communicate | PSYC | psyc:[//<host>[:[<port>][<transport>]]/[<object-name>][#<channel-name>] |
Official documentation from PSYC website |
rsync: | Rsync | rsync://<host>[:<port>]/<path> |
||
ssh: | SSH connections (like telnet:) and | IETF Draft | ssh://[<user>[;fingerprint=<host-key fingerprint>]@]<host>[:<port>] |
|
sftp: | SFTP file transfers (not be to confused with FTPS (FTP/SSL)) | IETF Draft | sftp://[<user>[;fingerprint=<host-key fingerprint>]@]<host>[:<port>]/<path>/<file> |
|
smb: | Accessing Samba shares (like NFS), see CIFS, Windows file sharing etc. | IETF Draft | smb://[<user>@]host[:<port>][/[<path>]][?<param1>=<value1>;<param2>=<value2>] or smb://[<user>@]workgroup[:<port>][/] |
|
steam: | Interact with Steam: install apps, purchase games, run games, etc. | Steam, Valve Corporation | steam:<command line arguments> or steam://<action>/<id, addon, IP, hostname, etc.> |
Official documentation from Valve Developer Community website |
xfire: | Adding friends and servers, joining servers, changing status text. | Xfire | xfire:<function>?<parameter1>=<value1>&<parameter2>=<value2> |
Official documentation from Xfire website |
ymsgr: | Sending an instant message to a Yahoo! Contact. | Yahoo! Instant Messenger With Voice | ymsgr:sendIM?<screenname> |