Uniform Resource Identifier (URI)
A Uniform Resource Identifier (URI) is a sequence of characters used to identify a resource. Resources are distinguished by their location on the internet, their name, or both.
There are two types of URI: the Uniform Resource Locator (URL) and Uniform Resource Name (URN).
URLs and URNs
A URI identifies physical or logical resources available on the web. Resources include web pages and electronic documents, but also people, places, objects, and abstract concepts.
A URI specifying the location of a resource is a Uniform Resource Locator (URL). A URI providing a persistent name without location details is a Uniform Resource Name (URN).
Every URL is a URI, and every URN is a URI. The terms overlap because URI is the umbrella category.
Syntax
The generic URI syntax follows this structure:
scheme ":" ["//" authority] path ["?" query] ["#" fragment]
Scheme
A required component naming the protocol or naming system.
The scheme is case-insensitive, begins with a letter, and
continues with any mix of letters, digits, plus +, hyphen
-, or period .. Common schemes include http, https,
ftp, mailto, and urn. IANA maintains the official
URI schemes registry.
Authority
An optional component prefixed by two slashes //. The
authority contains up to three sub-components:
- Userinfo: optional username (and deprecated password),
followed by
@. Theusername:passwordform is deprecated for security reasons. - Host: a registered domain name or IP address. IPv6
addresses are enclosed in brackets
[ ]. - Port: optional, preceded by a colon
:.
Path
A required component made up of segments separated by /.
The path is required for every URI but its value is
allowed to be empty (zero-length). A path following an
authority is either empty or starts with /.
Query
An optional component prefixed by ?. The query string
passes data or instructions to the resource, using a format
expected by the server.
Fragment
An optional component prefixed by #. The fragment identifies
a secondary resource or a specific part of the primary resource.
Fragments are resolved on the client side and are never sent
to the server in an HTTP request.
Percent-encoding
Characters outside the allowed set are represented using
Percent-Encoding. Each encoded character uses a percent
sign % followed by two hexadecimal digits representing the
octet value. Reserved characters with special meaning in the
URI syntax (:, /, ?, #, [, ], @, !, $,
&, ', (, ), *, +, ,, ;, =) are percent-encoded
when they appear in a component where they have no reserved
purpose.
Relative references
A URI reference is either a full URI or a relative reference. Relative references omit the scheme and resolve against a base URI to produce a target URI. This allows document trees to remain portable across different locations and access schemes.
../images/logo.png
Given a base URI of
https://example.re/docs/guide/index.html, the relative
reference above resolves to
https://example.re/docs/images/logo.png.
Examples
A full HTTP URI with scheme, authority, path, and fragment:
Example 1
http://www.example.re/doc/glossary#introduction
| Component | Value |
|---|---|
| Scheme | http |
| Authority | www.example.re |
| Path | /doc/glossary |
| Fragment | introduction |
An HTTPS URI with port, path, query, and fragment:
Example 2
https://example.re:5001/scripts/?job=111&task=1#main
| Component | Value |
|---|---|
| Scheme | https |
| Authority | example.re:5001 |
| Path | /scripts/ |
| Query | job=111&task=1 |
| Fragment | main |
A telephone URI with no authority. The tel scheme uses
only a scheme and path:
Example 3
tel:+1-212-555-1212
| Component | Value |
|---|---|
| Scheme | tel |
| Path | +1-212-555-1212 |
An FTP URI pointing to a specific file:
Example 4
ftp://ftp.example.re/doc/glossary.pdf
| Component | Value |
|---|---|
| Scheme | ftp |
| Authority | ftp.example.re |
| Path | /doc/glossary.pdf |
See also
- RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
- Uniform Resource Locator
- Uniform Resource Name
- Percent-Encoding
- HTTPS
- HTTP headers