CODEgrunt blog

Commentary and insight on web development and the Internet at large written with a wry smile and a hungry look.

jargon wars: URI versus URL - Wed Sep 16, 2009

Sometimes reference documentation can do more to confuse than to help. Take the terms "URI" ("Uniform Resource Indicator") and "URL" ("Uniform Resource Locator"). You will often see these acronyms tossed around like they are radically different beasts and this can lead to confusion when sorting out what the authors intent is.

For those just wanting the quick answer, a URL is just a specific type of URI. They are not different things. Now for the long answer. . .

Back in ye olde days of the early World Wide Web there was a different view of how web pages (and other services) were going to be found. A URI represented the entire heirarchy of methods for finding resources and these were broken into 3 discrete types (with the option to add more later). The 3 types were URL, URN and URC (with the latter "Universal Resource Characteristic" never gaining common use). URLs were to be the addresses that machines would use to locate services and then there were URNs ("Universal Resource Name") which humans would use to find these services. The intent was that humans would never see URLs at all and much like how DNS maps human readable host names like "codegrunt.com" to numerical IP addresses, browsers would hide URLs behind more readable URNs using some external service to do the conversion between then.

Well, this approach never really took off as people (and programmers) started using URLs directly. While URNs still have a place in modern infrastructure, they are no longer thought of as a discrete type of URI. The W3C covers this pretty well:

URIs, URLs, and URNs: Clarifications and Recommendations 1.0

. . . according to the contemporary view, the term "URL" does not refer to a formal partition of URI space; rather, URL is a useful but informal concept: a URL is a type of URI that identifies a resource via a representation of its primary access mechanism (e.g., its network "location"), rather than by some other attributes it may have. Thus as we noted, "http:" is a URI scheme. An http URI is a URL. The phrase "URL scheme" is now used infrequently, usually to refer to some subclass of URI schemes which exclude URNs.

Unfortunately, even documentation writers do not always get the distinction fully right which does not help with the confusion of this issue:

PHP Documentation: parse_url()

Note: This function is intended specifically for the purpose of parsing URLs and not URIs. However, to comply with PHP's backwards compatibility requirements it makes an exception for the file:// scheme where triple slashes (file:///...) are allowed. For any other scheme this is invalid.

The above note suggests that URIs and URLs are not the same thing which is not true. What they should be saying is:

Note: This function is intended specifically for the purpose of parsing URI schemes "http" and for backwards compatibility reasons, "ftp".

Ah, jargon. How I hate love you.

topics: Internet, jargon, PHP

blog

CODEgrunt consulting

Experienced PHP web developer.

$35 an hour, no job too small.

There is no replacement for integrity and experience.

Contact me for more information.

calendar

February 2012

Sun
Mon
Tue
Wed
Thu
Fri
Sat
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3