Frage Was ist der Unterschied zwischen einem URI, einer URL und einer URN?


Leute reden darüber URLs, URIs und URNEAls wären sie verschiedene Dinge, aber sie sehen für das bloße Auge gleich aus.

Was sind die unterscheidbaren Unterschiede zwischen ihnen?


3704
2017-10-06 21:26


Ursprung


Antworten:


Von RFC 3986:

Ein URI kann weiter als Lokator, Name oder beides klassifiziert werden. Das      Begriff "Uniform Resource Locator" (URL) bezieht sich auf die Teilmenge von URIs      das, zusätzlich zum Identifizieren einer Ressource, ein Mittel zur Verfügung stellt      Lokalisieren der Ressource durch Beschreibung ihres primären Zugriffsmechanismus      (z. B. sein Netzwerk "Standort"). Der Begriff "einheitlicher Ressourcenname"      (URN) wurde historisch verwendet, um auf beide URIs unter dem Begriff zu verweisen      "urn" -Schema [RFC2141], die global einzigartig bleiben müssen      und persistent, selbst wenn die Ressource aufhört zu existieren oder wird      nicht verfügbar und zu einem anderen URI mit den Eigenschaften eines Namens.

Also sind alle URLs URIs (eigentlich nicht ganz - siehe unten), und alle URNs sind URIs - aber URNs und URLs sind unterschiedlich, daher kann man nicht sagen, dass alle URIs URLs sind.

EDIT: Ich hatte vorher gedacht, dass alle URLs gültige URIs sind, aber laut Kommentar:

Nicht "Alle URLs sind URIs". Es hängt von der Interpretation des RFC ab. Zum Beispiel in Java der URI-Parser nicht mögen [ oder ] und das ist, weil die Spezifikation sagt "sollte nicht" und nicht "soll nicht".

So matschelt das Wasser leider weiter.

Wenn Sie noch nicht gelesen haben Roger Pates AntwortIch würde es auch empfehlen.


1515
2017-10-06 21:29



URIs identifizieren und URLs lokalisieren; jedoch, Lokatoren sind auch Identifikatoren, also ist jede URL auch eine URI, aber es gibt URIs, die keine URLs sind.

Beispiele

  • Roger Pate

Das ist mein Name, der eine Kennung ist. Es ist wie ein URI, kann aber keine URL sein, da es nichts über meinen Standort oder wie man mich kontaktiert, sagt. In diesem Fall werden mindestens 5 weitere Personen in den USA identifiziert.

  • 4914 West Bay Street, Nassau, Bahamas

Dies ist ein Lokator, der eine Kennung für diesen physischen Ort darstellt. Es ist wie eine URL und ein URI (da alle URLs URIs sind) und identifiziert mich auch indirekt als "Bewohner von ..". In diesem Fall identifiziert es mich eindeutig, aber das würde sich ändern, wenn ich einen Mitbewohner bekomme.

Ich sage "Gefällt mir", weil diese Beispiele nicht der erforderlichen Syntax folgen.

Populäre Verwirrung

Von Wikipedia:

Beim Computing ist ein Uniform Resource Locator (URL) eine Teilmenge des Uniform Resource Identifier (URI), der angibt, wo eine identifizierte Ressource verfügbar ist und wie sie abgerufen werden kann. In der populären Verwendung und in vielen technischen Dokumenten und verbalen Diskussionen wird es oft fälschlicherweise als Synonym für URI verwendet, ... [Betonung meiner]

Aufgrund dieser allgemeinen Verwirrung verwenden viele Produkte und Dokumentationen fälschlicherweise einen Begriff anstelle des anderen, weisen ihre eigene Unterscheidung zu oder verwenden sie synonym.

URNs

Mein Name, Roger Pate, könnte wie eine sein URNE (Uniform Resource Name), außer denen sind viel mehr reguliert und soll einzigartig sein beide Raum und Zeit.

Da ich diesen Namen derzeit mit anderen Leuten teile, ist er nicht global einzigartig und wäre als URN nicht geeignet. Aber selbst wenn keine andere Familie diesen Namen benutzt, bin ich nach meinem Großvater väterlicherseits benannt, also wäre es im Laufe der Zeit nicht einzigartig. Und selbst wenn Das war nicht der Fall, die Möglichkeit, meine Nachkommen nach mir zu benennen, macht dies als URN ungeeignet.

URNs unterscheiden sich von URLs in dieser starren Eindeutigkeitsbeschränkung, obwohl sie beide die Syntax von URIs teilen.


3524
2017-12-31 06:32



URI - Uniform Resource Identifier

URIs sind ein Standard zum Identifizieren von Dokumenten mit einer kurzen Zeichenfolge aus Zahlen, Buchstaben und Symbolen. Sie sind definiert durch RFC 3986 - Uniform Resource Identifier (URI): Generische Syntax. URLs, URNs und URCs sind alle Arten von URI.

URL - Uniform Resource Locator

Enthält Informationen zum Abrufen einer Ressource von ihrem Speicherort. Beispielsweise:

  • http://example.com/mypage.html
  • ftp://example.com/download.zip
  • mailto:user@example.com
  • file:///home/user/file.txt
  • tel:1-888-555-5555
  • http://example.com/resource?foo=bar#fragment
  • /other/link.html (Eine relative URL, die nur im Zusammenhang mit einer anderen URL nützlich ist)

URLs beginnen immer mit einem Protokoll (http) und enthalten normalerweise Informationen wie den Netzwerk-Hostnamen (example.com) und oft ein Dokumentpfad (/foo/mypage.html). URLs können Abfrageparameter und Fragmentkennungen haben.

URN - Einheitlicher Ressourcenname

Identifiziert eine Ressource anhand eines eindeutigen und dauerhaften Namens, gibt jedoch nicht unbedingt an, wie Sie sie im Internet finden. Es beginnt normalerweise mit dem Präfix urn:  Beispielsweise:

  • urn:isbn:0451450523 um ein Buch anhand seiner ISBN-Nummer zu identifizieren.
  • urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 eine global eindeutige Kennung
  • urn:publishing:book - Ein XML-Namespace, der das Dokument als Buchtyp identifiziert.

URNs können Ideen und Konzepte identifizieren. Sie sind nicht auf die Identifizierung von Dokumenten beschränkt. Wenn eine URN ein Dokument darstellt, kann sie von einem "Resolver" in eine URL übersetzt werden. Das Dokument kann dann von der URL heruntergeladen werden.

URC - Einheitliche Quellenangabe

Zeigt auf Metadaten zu einem Dokument und nicht auf das Dokument selbst. Ein Beispiel für eine URC ist eine, die auf den HTML-Quellcode einer Seite wie folgt zeigt: view-source:http://example.com/

Daten-URI

Anstatt sie im Internet zu lokalisieren oder zu benennen, können Daten direkt in einen URI platziert werden. Ein Beispiel wäre data:,Hello%20World.


Häufig gestellte Fragen

Ich habe gehört, dass ich URL nicht mehr sagen sollte, warum?

Die W3-Spezifikation für HTML besagt, dass die href eines Anker-Tags kann einen URI und nicht nur eine URL enthalten. Sie sollten in der Lage sein, eine URN wie z <a href="urn:isbn:0451450523">. Ihr Browser würde dann diese URN zu einer URL auflösen und das Buch für Sie herunterladen.

Wissen irgendwelche Browser wirklich, wie man Dokumente durch URN holt?

Nicht, dass ich weiß, aber moderne Webbrowser implementieren das Daten-URI-Schema.

Hat der Unterschied zwischen URL und URI irgendetwas damit zu tun, ob es relativ oder absolut ist?

Nein. Sowohl die relative als auch die absolute URL sind URLs (und URIs).

Hat der Unterschied zwischen URL und URI irgendetwas damit zu tun, ob er Abfrageparameter hat?

Nein. Beide URLs mit und ohne Abfrageparameter sind URLs (und URIs).

Hat der Unterschied zwischen URL und URI irgendetwas damit zu tun, ob er eine Fragmentkennung hat?

Nein. Beide URLs mit und ohne Fragment-ID sind URLs (und URIs).

Hat der Unterschied zwischen URL und URI irgendetwas damit zu tun, welche Zeichen erlaubt sind?

Nein. URLs sind als eine strikte Untergruppe von URIs definiert. Wenn ein Parser ein Zeichen in einer URL, aber nicht in einem URI zulässt, liegt ein Fehler im Parser vor. Die Spezifikationen gehen sehr detailliert darauf ein, welche Zeichen in welchen Teilen von URLs und URIs zulässig sind. Einige Zeichen sind möglicherweise nur in einigen Teilen der URL zulässig, aber Zeichen allein sind kein Unterschied zwischen URLs und URIs.

Aber sagt das W3C jetzt nicht, dass URLs und URIs dasselbe sind?

Ja. Das W3C erkannte, dass es eine Menge Verwirrung darüber gibt. Sie gaben ein URI-Klärungsdokument das besagt, dass es nun OK ist, die Begriffe URL und URI synonym zu verwenden (URI). Es ist nicht länger sinnvoll, URIs in verschiedene Typen wie URL, URN und URC zu segmentieren.

Kann ein URI sowohl eine URL als auch eine URN sein?

Die Definition von URN ist jetzt lockerer als das, was ich oben gesagt habe. Das neueste RFC auf URIs sagt, dass jeder URI nun ein URN sein kann (unabhängig davon, ob er mit urn:) solange es "die Eigenschaften eines Namens" hat. Das heißt: Es ist global eindeutig und persistent, auch wenn die Ressource nicht mehr existiert oder nicht mehr verfügbar ist. Ein Beispiel: Die URIs, die in HTML-Doctypes wie http://www.w3.org/TR/html4/strict.dtd. Dieser URI würde weiterhin den HTML4-Übergangsdoctype benennen, selbst wenn die Seite auf der w3.org-Website gelöscht würde.


URI/URL Venn Diagram


474
2018-03-04 21:51



Zusammenfassend: Ein URI identifiziert, eine URL identifiziert und lokalisiert.

Betrachten wir eine spezielle Ausgabe von Shakespeares Stück Romeo und Juliavon denen Sie eine digitale Kopie in Ihrem Heimnetzwerk haben.

Sie könnten den Text als identifizieren urn:isbn:0-486-27557-4.
Das wäre ein URI, genauer gesagt ein URNE* weil es Benennt den Text.

Sie könnten den Text auch als identifizieren file://hostname/sharename/RomeoAndJuliet.pdf.
Das wäre auch ein URI, aber genauer gesagt ein URL weil es sucht den Text.

* Einheitlicher Ressourcenname

(Beachten Sie, dass mein Beispiel angepasst wurde von Wikipedia)


233
2017-12-31 06:51



Dies sind einige sehr gut geschriebene, aber langatmige Antworten. Hier ist der Unterschied soweit CodeIgniter betroffen ist:

URL - http://example.com/some/page.html

URI - /some/seite.html

Einfach gesagt, URL ist der vollständige Weg, um jede Ressource überall zu identifizieren und kann verschiedene Protokolle wie FTP, HTTP, SCP usw. haben.

URI ist eine Ressource in der aktuellen Domäne, daher müssen weniger Informationen gefunden werden.

In jedem Fall, dass CodeIgniter das Wort URL oder URI verwendet, ist dies der Unterschied, über den sie sprechen, obwohl es im großen Schema des Webs nicht zu 100% korrekt ist.


124
2017-12-31 08:58



Eine kleine Ergänzung zu den bereits geposteten Antworten, hier ist ein Venn-Diagramm, um die Theorie zusammenzufassen (aus Prateek Joshis wunderschönem Erläuterung):

enter image description here

Und ein Beispiel (auch von Prateks Website):

enter image description here


64
2017-10-16 17:46



Dies ist eines der verwirrendsten und möglicherweise irrelevantesten Themen, mit denen ich als Webprofi konfrontiert bin.

So wie ich es verstehe, ist ein URI eine Beschreibung von etwas, das einem akzeptierten Format folgt, das beides oder entweder den eindeutigen Namen (Identifikation) von etwas und seinen Ort definieren kann.

Es gibt zwei grundlegende Untergruppen: URLs, die den Standort definieren (insbesondere einen Browser, der versucht, eine Webseite nachzuschlagen) und URNs, die den eindeutigen Namen von etwas definieren.

Ich denke, URNs ähneln den GUIDs. Sie sind einfach eine standardisierte Methode, um eindeutige Namen für Dinge zu geben. Wie im Namespace-Deklarativ, das den Namen eines Unternehmens verwendet - es ist nicht so, als würde auf einem Server irgendwo eine Ressource stehen, die dieser Textzeile entspricht -, wird einfach etwas eindeutig identifiziert.

Ich tendiere auch dazu, den Begriff URI vollständig zu vermeiden und Dinge nur in Form von URL oder URN zu diskutieren, da dies zu Verwirrung führt. Die Frage, die wir eigentlich für Menschen beantworten sollten, ist nicht so sehr die Semantik, sondern die Frage, wie man bei den Begriffen erkennen kann, ob es einen praktischen Unterschied in ihnen gibt oder nicht, der die Herangehensweise an eine Programmiersituation verändern wird. Zum Beispiel, wenn jemand mich im Gespräch korrigiert und sagt: "Oh, das ist keine URL, es ist eine URI" Ich weiß, dass sie voll davon sind. Wenn jemand sagt: "Wir verwenden eine URN, um die Ressource zu definieren", werde ich eher verstehen, dass wir sie nur eindeutig benennen und nicht auf einem Server lokalisieren.

Wenn ich weit weg bin - lass es mich wissen!


52
2017-12-01 13:07



Machen Sie Ihre Gedanken zuerst aus der Verwirrung heraus und nehmen Sie es einfach und Sie werden verstehen.

URI => Uniform Resource Identifier Identifiziert eine vollständige Adresse des Ressourcen-i-e-Standorts, des Namens oder beider.

URL => Einheitlicher Ressourcen-Locator Gibt den Speicherort der Ressource an.

URN => Einheitlicher Ressourcenname Identifiziert den Namen der Ressource

Beispiel

Wir haben eine Adresse https://www.google.com/folder/page.html woher,

URI (Uniform Resource Identifier) ​​=> https://www.google.com/folder/page.html

URL (Uniform Resource Locator) => https://www.google.com/

URN (Einheitlicher Ressourcenname) => /folder/page.html

URI => (URL + URN) oder nur URL oder URN


44
2017-07-21 17:50



URI => http://en.wikipedia.org/wiki/Uniform_Resource_Identifier

URLs sind eine Teilmenge von URIs (die auch URNs enthalten).

Grundsätzlich ist ein URI ein allgemeiner Bezeichner, bei dem eine URL eine Position und eine URN einen Namen angibt.


42
2017-10-06 21:30



Ein anderes Beispiel, das ich gerne bei URIs verwende, ist das xmlns-Attribut eines XML-Dokuments:

<rootElement xmlns:myPrefix="com.mycompany.mynode">
    <myPrefix:aNode>some text</myPrefix:aNode>
</rootElement>

In diesem Fall wäre com.mycompany.mynode ein URI, der den Namespace "myPrefix" für alle Elemente, die ihn in meinem XML-Dokument verwenden, eindeutig identifiziert. Dies ist KEINE URL, weil sie nur dazu dient, etwas per se zu identifizieren, nicht zu lokalisieren.


35
2017-12-31 07:38



Kennung = Name + Standort

Jede URL (Uniform Resource Locator) ist ein URI (Uniform Resource ich(abstractly), aber jeder URI ist keine URL. Es gibt eine andere Unterkategorie von URI ist URN (Uniform Resource Name), die eine benannte Ressource ist, aber nicht angeben, wie sie zu finden ist, wie mailto, news, ISBN ist URIs.

enter image description here

Syntax für URN:  [scheme:]scheme-specific-part[#fragment] 

Beispiele:
mailto: java-net@java.sun.com
Nachrichten: comp.lang.java
urn: isbn: 096139210x

Syntax für URL:  [scheme:][//authority][path][?query][#fragment] 

Beispiele:
http://java.sun.com/j2se/1.3/     docs / guide / Sammlungen / designfaq.html # 28
../../../demo/jfc/SwingSet2/src/SwingSet2.java
file: //host/dir/meineDatei.txt

Quelle

Analogie:
Um eine Person zu erreichen: Fahren (Protokoll andere SMS, E-Mail, Telefon), Adresse (Hostname andere Telefonnummer, Emailid) und Personenname (Objektname mit einem relativen Pfad).


31
2017-12-23 11:45