A Uniform Resource Locator (URL), colloquially termed a web address, is a reference to a web resource that specifies its location on a computer network and a mechanism for retrieving it. A URL is a specific type of Uniform Resource Identifier (URI), although many people use the two terms interchangeably.[a] URLs occur most commonly to reference web pages (http), but are also used for file transfer (ftp), email (mailto), database access (JDBC), and many other applications.
Most web browsers display the URL of a web page above the page in an address bar. A typical URL could have the form
http://www.example.com/index.html, which indicates a protocol (
http), a hostname (
www.example.com), and a file name (
Uniform Resource Locators were defined in RFC 1738 in 1994 by Tim Berners-Lee, the inventor of the World Wide Web, and the URI working group of the Internet Engineering Task Force (IETF), as an outcome of collaboration started at the IETF Living Documents Birds of a feather session in 1992.
The format combines the pre-existing system of domain names (created in 1985) with file path syntax, where slashes are used to separate directory and filenames. Conventions already existed where server names could be prefixed to complete file paths, preceded by a double slash (
Berners-Lee later expressed regret at the use of dots to separate the parts of the domain name within URIs, wishing he had used slashes throughout, and also said that, given the colon following the first component of a URI, the two slashes before the domain name were unnecessary.
An early (1993) draft of the HTML Specification referred to "Universal" Resource Locators. This was dropped some time between June 1994 (RFC 1630) and October 1994 (draft-ietf-uri-url-08.txt).
Every HTTP URL conforms to the syntax of a generic URI. The URI generic syntax consists of a hierarchical sequence of five components:
URI = scheme:[//authority]path[?query][#fragment]
where the authority component divides into three subcomponents:
authority = [userinfo@]host[:port]
This is represented in a syntax diagram as:
The URI comprises:
- A non-empty scheme component followed by a colon (
:), consisting of a sequence of characters beginning with a letter and followed by any combination of letters, digits, plus (
+), period (
.), or hyphen (
-). Although schemes are case-insensitive, the canonical form is lowercase and documents that specify schemes must do so with lowercase letters. Examples of popular schemes include
irc. URI schemes should be registered with the Internet Assigned Numbers Authority (IANA), although non-registered schemes are used in practice.[b]
- An optional authority component preceded by two slashes (
- An optional userinfo subcomponent that may consist of a user name and an optional password preceded by a colon (
:), followed by an at symbol (
@). Use of the format
username:passwordin the userinfo subcomponent is deprecated for security reasons. Applications should not render as clear text any data after the first colon (
:) found within a userinfo subcomponent unless the data after the colon is the empty string (indicating no password).
- An optional host subcomponent, consisting of either a registered name (including but not limited to a hostname), or an IP address. IPv4 addresses must be in dot-decimal notation, and IPv6 addresses must be enclosed in brackets (
- An optional port subcomponent preceded by a colon (
- An optional userinfo subcomponent that may consist of a user name and an optional password preceded by a colon (
- A path component, consisting of a sequence of path segments separated by a slash (
/). A path is always defined for a URI, though the defined path may be empty (zero length). A segment may also be empty, resulting in two consecutive slashes (
//) in the path component. A path component may resemble or map exactly to a file system path, but does not always imply a relation to one. If an authority component is present, then the path component must either be empty or begin with a slash (
/). If an authority component is absent, then the path cannot begin with an empty segment, that is with two slashes (
//), as the following characters would be interpreted as an authority component. The final segment of the path may be referred to as a 'slug'.
- An optional query component preceded by a question mark (
?), containing a query string of non-hierarchical data. Its syntax is not well defined, but by convention is most often a sequence of attribute–value pairs separated by a delimiter.
- An optional fragment component preceded by a hash (
#). The fragment contains a fragment identifier providing direction to a secondary resource, such as a section heading in an article identified by the remainder of the URI. When the primary resource is an HTML document, the fragment is often an
idattribute of a specific element, and web browsers will scroll this element into view.
A web browser will usually dereference a URL by performing an HTTP request to the specified host, by default on port number 80. URLs using the
https scheme require that requests and responses will be made over a secure connection to the website.
Internet users are distributed throughout the world using a wide variety of languages and alphabets and expect to be able to create URLs in their own local alphabets. An Internationalized Resource Identifier (IRI) is a form of URL that includes Unicode characters. All modern browsers support IRIs. The parts of the URL requiring special treatment for different alphabets are the domain name and path.
The domain name in the IRI is known as an Internationalized Domain Name (IDN). Web and Internet software automatically convert the domain name into punycode usable by the Domain Name System; for example, the Chinese URL
xn-- indicates that the character was not originally ASCII.
The URL path name can also be specified by the user in the local writing system. If not already encoded, it is converted to UTF-8, and any characters not part of the basic URL character set are escaped as hexadecimal using percent-encoding; for example, the Japanese URL
http://example.com/%E5%BC%95%E3%81%8D%E5%89%B2%E3%82%8A.html. The target computer decodes the address and displays the page.
Protocol-relative links (PRL), also known as protocol-relative URLs (PRURL), are URLs that have no protocol specified. For example,
//example.com will use the protocol of the current page, either HTTP or HTTPS.
In 2018 researchers at Google working on the Chrome browser suggested it was time to eliminate URLs, or at least stop using them as the primary way websites and pages identify themselves to users. "As web functionality has expanded", Wired wrote, "URLs have increasingly become unintelligible strings of gibberish combining components from third-parties or being masked by link shorteners and redirect schemes. And on mobile devices there isn't room to display much of a URL at all." This confusion and opacity has created an opportunity for Internet crime.
Adrienne Porter Felt, engineering manager for Chrome, agreed. "They're hard to read, it's hard to know which part of them is supposed to be trusted, and in general I don't think URLs are working as a good way to convey site identity." She said her team had just begun discussing that, and had not agreed on a solution. "I do know that whatever we propose is going to be controversial" said another Google engineer. "But it's important we do something, because everyone is unsatisfied by URLs. They kind of suck."
Several months later, at a security conference, Chrome's usable security head Emily Stark unveiled the first step Google had taken, TrickURI, an open source tool that allows developers to check whether their sites' URLs are displaying consistently and accurately. The team was also working on a feature for Chrome that would alert users when a URL seemed like one meant to deceive.
- A URL implies the means to access an indicated resource and is denoted by a protocol or an access mechanism, which is not true of every URI. Thus
http://www.example.comis a URL, while
- The procedures for registering new URI schemes were originally defined in 1999 by RFC 2717, and are now defined by RFC 7595, published in June 2015.
- For URIs relating to resources on the World Wide Web, some web browsers allow
.0portions of dot-decimal notation to be dropped or raw integer IP addresses to be used.
- Historic RFC 1866 (obsoleted by RFC 2854) encourages CGI authors to support ';' in addition to '&'.
- W3C (2009).
- "Forward and Backslashes in URLs". zzz.buzz. Retrieved 2018-09-19.
- RFC 3986 (2005).
- Joint W3C/IETF URI Planning Interest Group (2002).
- RFC 2396 (1998).
- Miessler, Daniel. "The Difference Between URLs and URIs".
- W3C (1994).
- IETF (1992).
- Berners-Lee (1994).
- Berners-Lee (2000).
- BBC News (2009).
- Berners-Lee, Tim; Connolly, Daniel (March 1993). Hypertext Markup Language (draft RFCxxx) (Technical report). p. 28.
- Berners-Lee, T; Masinter, L; McCahill, M (October 1994). Uniform Resource Locators (URL) (Technical report). cited in Ang, C.S.; Martin, D.C. (January 1995). Constituent Component Interface++ (Technical report). UCSF Library and Center for Knowledge Management.
- RFC 3986, section 3 (2005).
- IETF (2015).
- RFC 3986 (2005), §3.2.2.
- Lawrence (2014).
- RFC 2396 (1998), §3.3.
- RFC 1866 (1995), §8.2.1.
- W3C (2008).
- W3C (2014).
- IANA (2003).
- Steven M. Schafer (2011). HTML, XHTML, and CSS Bible. John Wiley & Sons. p. 124. Retrieved 12 October 2015.
- Newman, Lily Hay (September 4, 2018). "Google Wants to Kill the URL". Wired. Retrieved February 20, 2019.
- Newman, Lily Hay (January 29, 2019). "Google Takes Its First Steps Toward Killing the URL". Wired. Retrieved February 20, 2019.
- "Berners-Lee "sorry" for slashes". BBC News. 2009-10-14. Retrieved 2010-02-14.
- "Living Documents BoF Minutes". World Wide Web Consortium. 18 March 1992. Retrieved 2011-12-26.
- Berners-Lee, Tim (21 March 1994). "Uniform Resource Locators (URL): A Syntax for the Expression of Access Information of Objects on the Network". World Wide Web Consortium. Retrieved 13 September 2015.
- Berners-Lee, Tim; Masinter, Larry; McCahill, Mark (August 1998). "Uniform Resource Locators (URL)". Internet Engineering Task Force. Retrieved 31 August 2015.
- Berners-Lee, Tim (2015) . "Why the //, #, etc?". Frequently asked questions. World Wide Web Consortium. Retrieved 2010-02-03.
- Connolly, Dan; Sperberg-McQueen, C. M., eds. (21 May 2009). "Web addresses in HTML 5". World Wide Web Consortium. Retrieved 13 September 2015.
- Internet Assigned Numbers Authority (14 February 2003). "Completion of IANA Selection of IDNA Prefix". IETF-Announce mailing list. Retrieved 3 September 2015.
- Berners-Lee, Tim; Fielding, Roy; Masinter, Larry (August 1998). "Uniform Resource Identifiers (URI): Generic Syntax". Internet Engineering Task Force. Retrieved 31 August 2015.
- Hansen, T.; Hardie, T. (June 2015). Thaler, D., ed. "Guidelines and Registration Procedures for URI Schemes". Internet Engineering Task Force. ISSN 2070-1721.
- Mealling, M.; Denenberg, R., eds. (August 2002). "Report from the Joint W3C/IETF URI Planning Interest Group: Uniform Resource Identifiers (URIs), URLs, and Uniform Resource Names (URNs): Clarifications and Recommendations". World Wide Web Consortium. Retrieved 13 September 2015.
- Berners-Lee, Tim; Fielding, Roy; Masinter, Larry (January 2005). "Uniform Resource Identifiers (URI): Generic Syntax". Internet Engineering Task Force. Retrieved 31 August 2015.
- "An Introduction to Multilingual Web Addresses". 9 May 2008. Retrieved 11 January 2015.
- Phillip, A. (2014). "What is Happening with "International URLs"". World Wide Web Consortium. Retrieved 11 January 2015.