ChatGPT解决这个技术问题 Extra ChatGPT

What is the difference between URI, URL and URN? [duplicate]

This question already has answers here: What is the difference between a URI, a URL and a URN? (31 answers) Closed 7 years ago.

What's the difference between an URI, URL and URN? I have read a lot of sites (even Wikipedia) but I don't understand it.

URI: http://www.foo.com/bar.html
URL: http://www.foo.com/bar.html
URN: bar.html

Is this correct?

Worth reading (perhaps after reading the answer provided below): w3.org/TR/uri-clarification Also, the following two links may help clarify when something is a URL VS URN. Permanent URI Schemes: (URL/URN namespaces I guess, though URN has it's own entry in this list which leads to the next link I provide here) iana.org/assignments/uri-schemes.html URN Namespaces: www.iana.org/assignments/urn-namespaces/urn-namespaces.xml

C
Community

A Uniform Resource Identifier (URI) is a string of characters used to identify a name or a resource on the Internet.

A URI identifies a resource either by location, or a name, or both. A URI has two specializations known as URL and URN.

A Uniform Resource Locator (URL) is a subset of the Uniform Resource Identifier (URI) that specifies where an identified resource is available and the mechanism for retrieving it. A URL defines how the resource can be obtained. It does not have to be a HTTP URL (http://), a URL can also start with ftp:// or smb://, specifying the protocol that's used to get the resource.

A Uniform Resource Name (URN) is a Uniform Resource Identifier (URI) that uses the URN scheme, and does not imply availability of the identified resource. Both URNs (names) and URLs (locators) are URIs, and a particular URI may be both a name and a locator at the same time.

This diagram (source) visualizes the relationship between URI, URN, and URL:

https://quintupledev.files.wordpress.com/2016/02/eyevn.jpg

The URNs are part of a larger Internet information architecture which is composed of URNs, URCs and URLs.

bar.html is not a URN. A URN is similar to a person's name, while a URL is like a street address. The URN defines something's identity, while the URL provides a location. Essentially URN vs. URL is "what" vs. "where". A URN has to be of this form <URN> ::= "urn:" <NID> ":" <NSS> where <NID> is the Namespace Identifier, and <NSS> is the Namespace Specific String.

To put it differently:

A URL is a URI that identifies a resource and also provides the means of locating the resource by describing the way to access it

A URL is a URI

A URI is not necessarily a URL

I'd say the only thing left to make it 100% clear would be to have an example of an URI that is not an URL. We can use the examples in RFC3986:

URL: ftp://ftp.is.co.za/rfc/rfc1808.txt
URL: http://www.ietf.org/rfc/rfc2396.txt
URL: ldap://[2001:db8::7]/c=GB?objectClass?one
URL: mailto:John.Doe@example.com
URL: news:comp.infosystems.www.servers.unix
URL: telnet://192.0.2.16:80/
URN (not URL): urn:oasis:names:specification:docbook:dtd:xml:4.1.2
URN (not URL): tel:+1-816-555-1212 (disputed, see comments)

Perhaps an example can clarify this: the ISBN number used for books is in fact a URN, it's a unambiguous identifier for a given book. But a ISBN number is not a URL as it does not define where the book can be found.
urn:isbn:0-486-27557-4 (a specific edition of Shakespeare's play Romeo and Juliet) is in fact a URN (and therefore it's a URI), but it's not a URL.
By the way: the tel example is not a perfect one as one might argue that it is in fact a URL (even tough it's not a URL in the common internet-influenced area).
@thom : check w3.org/TR/uri-clarification for more.
@ayush: A telephone number is in fact the description of the location of a given telephone connection. The number allows the telephone system to locate the receiver in the world-wide telephone network due to its unique telephone number and route the call appropriately (+1 for the USA, 816 for Missouri, etc.).
C
Community

Below I sum up Prateek Joshi's awesome explanation.

The theory:

URI (uniform resource identifier) identifies a resource (text document, image file, etc)

URL (uniform resource locator) is a subset of the URIs that include a network location

URN (uniform resource name) is a subset of URIs that include a name within a given space, but no location

That is:

https://i.stack.imgur.com/eYeVn.jpg

And for an example:

https://i.stack.imgur.com/mcTKf.jpg

Also, if you haven't already, I suggest reading Roger Pate's answer.


Because when using visuals it is much more easier/intuitive to get around.
what's marked as a URN is not technically one, as stated in accepted answer, "A URN has to be of this form ::= "urn:" ":" where is the Namespace Identifier, and is the Namespace Specific String.". though it is sort of a urn functionally hiding underneath the url.
According to this answer, there are URIs which are neither a URL nor a URN. But it looks very strange to me...
@superciccio14, yes, I agree. wanted to point it out either. Can the author of the answer give some examples of the URIs which are neither URLs, nor URNs?
I think this is wrong. There is no overlap between URL and URN.
N
Nisse Engström

URL -- Uniform Resource Locator

Contains information about how to fetch a resource from its location. For example:

http://example.com/mypage.html

ftp://example.com/download.zip

mailto:user@example.com

file:///home/user/file.txt

http://example.com/resource?foo=bar#fragment

/other/link.html (A relative URL, only useful in the context of another URL)

URLs always start with a protocol (http) and usually contain information such as the network host name (example.com) and often a document path (/foo/mypage.html). URLs may have query parameters and fragment identifiers.

URN -- Uniform Resource Name

Identifies a resource by name. It always starts with the prefix urn: For example:

urn:isbn:0451450523 to identify a book by its ISBN number.

urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 a globally unique identifier

urn:publishing:book - An XML namespace that identifies the document as a type of book.

URNs can identify ideas and concepts. They are not restricted to identifying documents. When a URN does represent a document, it can be translated into a URL by a "resolver". The document can then be downloaded from the URL.

URI -- Uniform Resource Identifier

URIs encompasses both URLs, URNs, and other ways to indicate a resource.

An example of a URI that is neither a URL nor a URN would be a data URI such as data:,Hello%20World. It is not a URL or URN because the URI contains the data. It neither names it, nor tells you how to locate it over the network.

There are also uniform resource citations (URCs) that point to meta data about a document rather than to the document itself. An example of a URC would be an indicator for viewing the source code of a web page: view-source:http://example.com/. A URC is another type of URI that is neither URL nor URN.

Frequently Asked Questions

I've heard that I shouldn't say URL anymore, why?

The w3 spec for HTML says that the href of an anchor tag can contain a URI, not just a URL. You should be able to put in a URN such as <a href="urn:isbn:0451450523">. Your browser would then resolve that URN to a URL and download the book for you.

Do any browsers actually know how to fetch documents by URN?

Not that I know of, but modern web browser do implement the data URI scheme.

Can a URI be both a URL and a URN?

Good question. I've seen lots of places on the web that state this is true. I haven't been able to find any examples of something that is both a URL and a URN. I don't see how it is possible because a URN starts with urn: which is not a valid network protocol.

Does the difference between URL and URI have anything to do with whether it is relative or absolute?

No. Both relative and absolute URLs are URLs (and URIs.)

Does the difference between URL and URI have anything to do with whether it has query parameters?

No. Both URLs with and without query parameters are URLs (and URIs.)

Does the difference between URL and URI have anything to do with whether it has a fragment identifier?

No. Both URLs with and without fragment identifiers are URLs (and URIs.)

Is a tel: URI a URL or a URN?

For example tel:1-800-555-5555. It doesn't start with urn: and it has a protocol for reaching a resource over a network. It must be a URL.

But doesn't the w3C now say that URLs and URIs are the same thing?

Yes. The W3C realized that there is a ton of confusion about this. They issued a URI clarification document that says that it is now OK to use URL and URI interchangeably. It is no longer useful to strictly segment URIs into different types such as URL, URN, and URC.


a tel: is a URI because it's an identifier. Read RFC 3966. It's not a URL, because it doesn't help you locate a resource on the web. There is no actual resource to link to, so that'd be impossible. For example, an anchor href URI for tel: would instead launch whatever program is used to dial the number.
@raiks This answer was submitted well after other answers. The StackOverflow system is not good at identifying good late answers when there are already highly upvoted answers. It also doesn't help that this question is now closed. I put the same answer on the duplicate: What is the difference between a URI, a URL and a URN? where it has more up votes, but where the two highest answers still have 10 times the score.
Your browser would then resolve that URN to a URL and download the book for you. -- Not necessarily. For example, if I put in an ISBN URN, where should it take me? A place to buy a physical or digital copy of the book? A place to download or read it online? The URN merely identifies a resource. A URL allows you to specify where to locate a resource. A registered URN without a location uses the urn scheme while https://www.google.com/ is a URL that is also a URN (it both identifies and locates the Google Web Search resource).
@taco not sure why you are saying tel: doesn't help you locate the resource. It is clearly telling you the you can reach it through the conventional telephony network using the PSTN system. Same thing as http: says you can reach it with the DNS service using the plain text HTTP, https: similarly but through TLS, and mailto: using SMTP. What happens when you click on it or whether you have software that can handle a call or send an email is completely irrelevant for the semantics of a URL. Maybe the consumer of the tel: is an automated calling system which can handle it easily.
@taco But why are you saying you have to reach it via hypertext? A URL does not dicate that afaik. ftp:// and mailto:// are URLs they are NOT reachable via HTTP. Only http URLs are. The ID in a tel: URL is the telephone number, and saying it is a tel: not only qualifies it but also specifies how to reach it (by calling it via PSTN). Can't see the difference between a tel: URL and for example a sip: URL. Even Microsoft refers to them as URLs: docs.microsoft.com/en-us/previous-versions/windows/desktop/…
N
Nisse Engström

URI (Uniform Resource Identifier) according to Wikipedia:

a string of characters used to identify a resource.

URL (Uniform Resource Locator) is a URI that implies an interaction mechanism with resource. for example https://www.google.com specifies the use of HTTP as the interaction mechanism. Not all URIs need to convey interaction-specific information.

URN (Uniform Resource Name) is a specific form of URI that has urn as it's scheme. For more information about the general form of a URI refer to https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax

IRI (International Resource Identifier) is a revision to the definition of URI that allows us to use international characters in URIs.