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

4364

Die Leute sprechen über URLs , URIs und URNs, als wären sie verschiedene Dinge, aber sie sehen mit bloßem Auge gleich aus.

Was sind die unterscheidbaren Unterschiede zwischen ihnen?

Sean McMains
quelle
158
URL ist spezifischer als URI.
mk12
30
Für die Webmaster nehmen diese Frage auf: Was ist der Unterschied zwischen URI und URL
Hippietrail
162
Mini Venn Diagramm:( URIs ( URLs ) )
icc97
29
Es scheint immer noch viel Verwirrung über URI und URL zu geben, selbst von denen, die versucht haben, die Frage zu beantworten. Es wäre für alle von Vorteil, praktische Beispiele für URLs zu sehen, die keine URIs sind, Beispiele für URIs, die keine URLs sind, und Beispiele für URLs und URIs.
Dennis
30
Kathy: Ist das dein Hund? Bob: Es wäre richtiger, ihn einen Hund zu nennen. Kathy: Nein, er ist ein Hund. Sie, Sir, sind ein Pedant.
Yojimbo

Antworten:

1747

Aus RFC 3986 :

Ein URI kann weiter als Locator, Name oder beides klassifiziert werden. Der Begriff "Uniform Resource Locator" (URL) bezieht sich auf die Teilmenge von URIs, die zusätzlich zur Identifizierung einer Ressource ein Mittel zum Lokalisieren der Ressource bereitstellen, indem ihr primärer Zugriffsmechanismus (z. B. ihr Netzwerk "Standort") beschrieben wird. Der Begriff "Uniform Resource Name" (URN) wurde in der Vergangenheit verwendet, um beide URIs im Rahmen des "Urnen" -Schemas [RFC2141] zu bezeichnen , die global eindeutig und dauerhaft bleiben müssen, selbst wenn die Ressource nicht mehr existiert oder nicht mehr verfügbar ist zu einem anderen URI mit den Eigenschaften eines Namens.

Alle URLs sind also URIs (eigentlich nicht ganz - siehe unten), und alle URNs sind URIs - aber URNs und URLs sind unterschiedlich, sodass Sie nicht sagen können, dass alle URIs URLs sind.

EDIT: Ich hatte vorher gedacht, dass alle URLs gültige URIs sind, aber gemäß den Kommentaren:

Nicht "alle URLs sind URIs". Dies hängt von der Interpretation des RFC ab. Zum Beispiel in Java mag der URI-Parser nicht [oder ]und das liegt daran, dass in der Spezifikation "sollte nicht" und nicht "soll nicht" steht.

Das trübt das Wasser leider weiter.

Wenn Sie die Antwort von Roger Pate noch nicht gelesen haben , würde ich Ihnen auch raten, dies zu tun.

Jon Skeet
quelle
15
Nur URIs mit dem Schema urn: sind URNs. Ein URI kann eine klassische URL, ein URN oder nur ein URI sein, der nicht mit "urn:" beginnt und sich nicht auf einen Speicherort einer Ressource bezieht.
Mark Cidade
18
Nicht " alle URLs sind URIs ". Dies hängt von der Interpretation des RFC ab. Zum Beispiel in Java mag der URI-Parser nicht [oder ]und das liegt daran, dass in der Spezifikation "sollte nicht" und nicht "soll nicht" steht.
Adam Gent
5
@AdamGent: RFC 3986 1.1.3: "Ein URI kann weiter als Locator, Name oder beides klassifiziert werden." Wenn URL eine spezielle Art von URI ist, bedeutet dies, dass jede URL eine URI ist. Nicht wahr?
Hubert
14
@AdamGent: Das klingt nach einer Java-Implementierungs-Eigenart und nicht normativ. Das java.net.URIDokument selbst sagt: "Jede URL ist abstrakt eine URI, aber nicht jede URI ist eine URL." Und java.net.URLmacht seltsame Dinge wie das Überprüfen der Gleichheit von URLs durch Auflösen von Hostnamen in IP-Adressen (was in erster Linie im Widerspruch zu RFC 3986 Sek 6 steht und virtuelle Hosts zerstört). Ich denke, dies bedeutet nur, dass die Java Standard Library ein inkonsistentes Klassenverhalten aufweist.
Andrew Janke
3
@ JonSkeet Müssen Sie vielleicht nur zwischen Standards und Implementierungen unterscheiden? Beispiel: "Formal gesehen sind laut RFCs alle URLs URIs. (RFC-Auszug). Vorhandene Implementierungen stimmen jedoch möglicherweise nicht genau mit der Spezifikation überein, möglicherweise aus Gründen der Interoperabilität, und verwenden möglicherweise URLs, die gemäß den RFCs nicht gültig sind. Und weil es sich um einen komplizierten Bereich handelt." Einige Personen und Dokumente verwenden möglicherweise "URL", um etwas anderes als das von RFC angegebene zu bedeuten. " So ähnlich wie die meisten E-Mail-Validierungsroutinen nicht mit den RFC-Definitionen übereinstimmen.
Andrew Janke
3840

URIs identifizieren und URLs lokalisieren ; jedoch sind Locators auch Bezeichner , so dass jeder URL ist auch eine URI, aber es gibt URIsdie keine URLs sind.

Beispiele

  • Roger Pate

Dies ist mein Name, der eine Kennung ist. Es ist wie eine URI, kann jedoch keine URL sein, da es Ihnen nichts über meinen Standort oder die Kontaktaufnahme mit mir sagt. In diesem Fall werden auch mindestens 5 andere Personen allein in den USA identifiziert.

  • 4914 West Bay Street, Nassau, Bahamas

Dies ist ein Locator, der eine Kennung für diesen physischen Standort darstellt. Es ist wie eine URL und eine URI (da alle URLs URIs sind) und identifiziert mich auch indirekt als "wohnhaft in ...". 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.

Volksverwirrung

Aus Wikipedia :

Beim Rechnen ist eine URL (Uniform Resource Locator) eine Teilmenge der URI (Uniform Resource Identifier), die angibt, wo eine identifizierte Ressource verfügbar ist, und den Mechanismus zum Abrufen. In der allgemeinen Verwendung und in vielen technischen Dokumenten und mündlichen Diskussionen wird es oft fälschlicherweise als Synonym für URI verwendet , ... [Hervorhebung von mir]

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

URNs

Mein Name, Roger Pate, könnte wie ein URN (Uniform Resource Name) sein, außer dass diese viel stärker reguliert sind und sowohl räumlich als auch zeitlich einzigartig sein sollen .

Da ich diesen Namen derzeit mit anderen Personen teile, ist er nicht global eindeutig und als URN nicht geeignet. Selbst wenn keine andere Familie diesen Namen verwenden würde, bin ich nach meinem Großvater väterlicherseits benannt, sodass er im Laufe der Zeit immer noch nicht einzigartig wäre. Und selbst wenn das nicht der Fall war, 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 beide die Syntax von URIs gemeinsam haben.

Gemeinschaft
quelle
3
URNs are different from URLs in this rigid uniqueness constraintBedeutet dies, dass URLs einen Ort nicht eindeutig identifizieren?
Eugene
30
Rogers Antwort liefert gute pragmatische Ratschläge. Für die offizielle Antwort gehe ich zum W3C, der 2001 " URIs, URLs und URNs: ​​Erläuterungen und Empfehlungen " veröffentlichte. Kurz gesagt, W3C sagt, dass die zeitgenössische Ansicht ist, dass alles ein URI ist. URL ist ein informelles Konzept, kein formelles Konzept. Und die Verwirrung geht auf eine "klassische Sichtweise" zurück, die versuchte, streng zwischen URI-Kategorien zu unterscheiden (von denen URL eine Kategorie war).
Netjeff
5
..a Uniform Resource Locator (URL) .. gibt an, wo eine identifizierte Ressource verfügbar ist und welchen Mechanismus sie abruft . Mit anderen Worten, es gibt keine "relative" URL?
Arne
9
Ist "earth128: Edward-de-Leau / 6000000000569063853" (das eindeutige Ich über mehrere Multiversen) eine URN, eine URL oder eine URI?
Edelwasser
6
@edelwater: Ich nehme an, das ist ein Uri, da er Sie nur identifiziert, aber nichts darüber sagt, wie Sie zu Ihnen gelangen, es sei denn, Sie meinen, dass earth128 ein Medium für
interplanetare
670

URI - Uniform Resource Identifier

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

URL - Uniform Resource Locator

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

  • http://example.com/mypage.html
  • ftp://example.com/download.zip
  • mailto:[email protected]
  • 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 Kontext einer anderen URL nützlich ist.)

URLs beginnen immer mit einem Protokoll ( http) und enthalten normalerweise Informationen wie den Netzwerkhostnamen ( example.com) und häufig einen Dokumentpfad ( /foo/mypage.html). URLs können Abfrageparameter und Fragmentkennungen enthalten.

URN - Uniform Resource Name

Identifiziert eine Ressource anhand eines eindeutigen und dauerhaften Namens, sagt Ihnen jedoch nicht unbedingt, wie Sie sie im Internet finden können. Es beginnt normalerweise mit dem Präfix. urn: Zum Beispiel:

  • urn:isbn:0451450523 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 Buchart 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 - Uniform Resource Citation

Verweist auf Metadaten zu einem Dokument und nicht auf das Dokument selbst. Ein Beispiel für einen URC verweist auf den HTML-Quellcode einer Seite wie:view-source:http://example.com/

Daten-URI

Anstatt es im Internet zu finden oder zu benennen, können Daten direkt in eine URI gestellt werden. Ein Beispiel wäre data:,Hello%20World.


Häufig gestellte Fragen

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

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

Wissen Browser tatsächlich, wie Dokumente per URN abgerufen werden?

Nicht das ich wüsste, aber moderne Webbrowser implementieren das Daten-URI-Schema.

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

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

Hat der Unterschied zwischen URL und URI etwas damit zu tun, ob Abfrageparameter vorhanden sind?

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

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

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

Hat der Unterschied zwischen URL und URI etwas damit zu tun, welche Zeichen zulässig sind?

Nein. URLs werden als strikte Teilmenge 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 enthalten detaillierte Informationen darüber, 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 dies eine Menge Verwirrung stiftet. Sie gaben ein URI-Klärungsdokument heraus, das besagt, dass es jetzt in Ordnung ist, die Begriffe URL und URI austauschbar zu verwenden (um URI zu bedeuten). Es ist nicht mehr sinnvoll, URIs streng in verschiedene Typen wie URL, URN und URC zu segmentieren.

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

Die Definition von URN ist jetzt lockerer als oben angegeben. Der neueste RFC für URIs besagt, dass jeder URI jetzt ein URN sein kann (unabhängig davon, ob er damit beginnt urn:), solange er "die Eigenschaften eines Namens" hat. Das heißt: Es ist global einzigartig und dauerhaft, selbst wenn die Ressource nicht mehr existiert oder nicht mehr verfügbar ist. Ein Beispiel: Die in HTML-Doctypes verwendeten URIs wie http://www.w3.org/TR/html4/strict.dtd. Diese URI würde den HTML4-Übergangsdoktyp auch dann benennen, wenn die Seite auf der Website w3.org gelöscht würde.


URI / URL-Venn-Diagramm

Stephen Ostermiller
quelle
8
Ist "C: \ myfile" eine URI, URL oder URN? oder keiner von ihnen.
bvdb
12
Ein Dateipfad ist keine URL oder URI, es sei denn, Sie setzen das file://Präfix darauf. Obwohl Browser im Allgemeinen nicht mit URL formatierte Dateipfade verarbeiten. Mozilla veröffentlicht ihre Testfälle für Datei-URLs .
Stephen Ostermiller
2
Siehe Abschnitt 1.1 des RFC - "Einheitlichkeit bietet mehrere Vorteile. Sie ermöglicht die Verwendung verschiedener Arten von Ressourcenkennungen im selben Kontext, auch wenn die für den Zugriff auf diese Ressourcen verwendeten Mechanismen unterschiedlich sein können. Sie ermöglicht eine einheitliche semantische Interpretation gängiger syntaktischer Konventionen über verschiedene Arten von Ressourcen-
IDs
Sie haben mailto:[email protected]als URL erwähnt, aber eine andere Antwort unten besagt, dass es sich um eine URN handelt? Welches ist richtig? Ist es sowohl URN als auch URL?
user31782
5
Diese Antwort ist viel einfacher zu verstehen. Ich kann die klaren Bilder eines echten Beispiels der URLs & URN sehen. Und damit jeder mehr darüber lesen kann ... danielmiessler.com/study/url-uri
vee
253

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

Betrachten Sie eine bestimmte Ausgabe von Shakespeares Stück Romeo und Julia , von der Sie eine digitale Kopie in Ihrem Heimnetzwerk haben.

Sie können den Text als identifizieren urn:isbn:0-486-27557-4.
Das wäre eine URI, genauer gesagt eine URN *, weil sie den Text benennt .

Sie können den Text auch als identifizieren file://hostname/sharename/RomeoAndJuliet.pdf.
Das wäre auch eine URI, genauer gesagt eine URL, da sie den Text findet .

* Einheitlicher Ressourcenname

(Beachten Sie, dass mein Beispiel aus Wikipedia übernommen wurde )

Greg
quelle
6
Es ist hilfreich, die tatsächliche URN zu notieren (um zu sehen, wie sie mit einer URL verglichen wird): urn: isbn: 0-486-27557-4
Michael Brewer-Davis
2
@Michael - Nach meinem Verständnis wird ISBN 0486275574auch der Text benannt und somit als URN qualifiziert. Ich wähle ein Format, von dem ich glaubte, dass es den Lesern vertrauter ist.
Greg
2
Wäre es also sinnvoll zu sagen, dass der Hash (z. B. SHA1) einer Datei eine URN für diese Datei sein könnte?
Johnsimer
@johnsimer Glaube nicht, da du eine Kopie einer Datei auf demselben Computer haben könntest, was zu demselben Hash führen würde und daher nicht eindeutig ist.
Dennis98
141

Dies sind einige sehr gut geschriebene, aber langatmige Antworten. Hier ist der Unterschied in Bezug auf CodeIgniter :

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

URI - /some/page.html

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

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

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

Phil Sturgeon
quelle
10
Diese Antwort mag zu stark vereinfacht sein, aber schauen Sie sich den Kontext seiner Frage an. Es wird ihm hilfreicher sein, über XML-Namespaces zu waffeln!
Phil Sturgeon
140
Diese Antwort ist nicht nur falsch, sondern auch aktiv irreführend. Beide Beispiele sind URLs. Und da jede URL auch eine URI ist, bedeutet dies, dass beide Beispiele URIs sind. Um den Unterschied zwischen URIs und URLs zu demonstrieren, ist dies völlig nutzlos.
Jörg W Mittag
12
Dies ist der Unterschied für CodeIgniter. In jedem Fall verwenden sie das Wort URL oder URI. Dies ist der Unterschied, über den sie sprechen. Daher ist es im großen Schema des Webs nicht 100% richtig, aber im Rahmen der Frage des OP (der Unterschied in CodeIgniter) ist diese Antwort vollkommen richtig.
Phil Sturgeon
12
Das ist falsch. @ JörgWMittag ist meistens auf den Punkt. URLs sind URIs und "voll qualifiziert". Die "URL" in dieser Antwort lautet also beides. Ist /some/page.htmlaber keine URI. Es ist eine "relative Referenz", die eine Art "URI-Referenz" ist. In Kombination mit einem Basis-URI-Kontext kann er in einen URI aufgelöst werden, ist jedoch selbst kein URI. Siehe Abschnitt 4.1 von RFC 3986 . CodeIgniter verwendet wahrscheinlich die falschen Begriffe und das sollte aufgerufen werden. Das Q (wie derzeit bearbeitet) ist nicht als CodeIgniter-spezifisch gerahmt.
Andrew Janke
37
Für zukünftige Leute, die diese Kommentare lesen und genauso verwirrt sind wie ich: Diese Antwort wurde für diese Frage nicht veröffentlicht. Diese Frage hatte nie etwas mit CodeIgniter zu tun. Es gab eine doppelte Frage, in der CodeIgniter ausdrücklich erwähnt wurde, die geschlossen wurde und deren Antworten auf diese Frage migriert wurden. Diese Antwort war eine von denen, die von der alten geschlossenen Frage zu dieser geschützten Frage verschoben wurden. Trotzdem ist diese Antwort irreführend. Ich habe es abgelehnt - andere sollten das Gleiche tun, da es in seiner neuen Heimat falsch ist. Der Autor sollte es löschen oder die Zusammenführung rückgängig machen.
ArtOfWarfare
92

Lassen Sie Ihren Geist zunächst aus der Verwirrung geraten und nehmen Sie es einfach und Sie werden verstehen.

URI => Uniform Resource Identifier Identifiziert eine vollständige Adresse der Ressource, dh Standort, Name oder beides.

URL => Uniform Resource Locator Gibt den Speicherort der Ressource an.

URN => Uniform Resource Name Gibt den Namen der Ressource an

Beispiel

Wir haben die Adresse https://www.google.com/folder/page.html wo,

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

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

URN (Uniform Resource Name) => /folder/page.html

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

Eugen Konkov
quelle
66

Als kleine Ergänzung zu den bereits veröffentlichten Antworten ist hier ein Venn-Diagramm, um die Theorie zusammenzufassen (aus Prateek Joshis schöner Erklärung ):

Geben Sie hier die Bildbeschreibung ein

Und ein Beispiel (auch von Prateeks Website):

Geben Sie hier die Bildbeschreibung ein

Gustavo Mori
quelle
20
Ich glaube, die zweite Abbildung ist falsch. Durch die Spezifikation url.spec.whatwg.org/#url-writing Eine URL muss entweder als relative URL oder als absolute URL geschrieben werden, optional gefolgt von "#" und einem Fragment. So #postskönnte Fragment-
ID
7
Die beiden Abbildungen widersprechen sich.
Patapouf_ai
53

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

Nach meinem Verständnis ist eine URI eine Beschreibung von etwas, die einem akzeptierten Format folgt und sowohl den eindeutigen Namen (die Identifikation) von etwas als auch dessen Position definieren kann.

Es gibt zwei grundlegende Untergruppen: URLs, die den Speicherort definieren (insbesondere für einen Browser, der versucht, eine Webseite aufzurufen), und URNs, die den eindeutigen Namen von etwas definieren.

Ich neige dazu, URNs als ähnlich wie GUIDs zu betrachten. Sie sind einfach eine standardisierte Methode zur Bereitstellung eindeutiger Namen für Dinge. Wie in der Namespace-Deklarative, die den Namen eines Unternehmens verwendet - es ist nicht so, dass sich irgendwo auf einem Server eine Ressource befindet, die dieser Textzeile entspricht -, identifiziert sie einfach etwas eindeutig.

Ich neige auch dazu, den Begriff URI vollständig zu vermeiden und die Dinge nur in Bezug auf URL oder URN zu diskutieren, da dies so viel Verwirrung stiftet. Die Frage, die wir wirklich versuchen sollten, für Menschen zu beantworten, ist nicht so sehr die Semantik, sondern wie man bei der Begegnung mit den Begriffen erkennt, ob es einen praktischen Unterschied gibt, der die Herangehensweise an eine Programmiersituation verändert oder nicht. Wenn mich zum Beispiel jemand im Gespräch korrigiert und sagt: "Oh, das ist keine URL, es ist eine URI", weiß ich, dass er voll davon ist. Wenn jemand sagt "Wir verwenden eine URN, um die Ressource zu definieren", verstehe ich eher, dass wir sie nur eindeutig benennen und nicht auf einem Server lokalisieren.

Wenn ich weit weg von der Basis bin - lass es mich wissen!

Kevin Lowe
quelle
4
Nein, ich denke du hast recht. Die Semantik von URI vs URL vs URL vs URI-ref usw. ist für die meisten Entwickler nutzlos, nur weil sie zu sinnlosen (unproduktiven, für die Entscheidungsfindung unbedeutenden) Debatten führt. Wenn die Google-API redirect_urlanstelle von verwendet redirect_uriwürde, würde es jemanden wirklich interessieren?
53

Identität = Name mit Standort

Jede URL ( U niversal R esource L ocator) eine URI ( U niversal R esource I dentifier), abstrakt gesprochen, aber jede URI ist kein URL. Es ist eine weitere Unterkategorie von URI ist URN ( U niversal R esource N ame), die eine benannte Ressource ist aber nicht angeben , wie sie zu finden, wie mailto, Nachrichten, ist ISBN URIs. Quelle

Geben Sie hier die Bildbeschreibung ein

URNE:

  • URN-Format: urn:[namespace identifier]:[namespace specific string]
  • Urne: und: stehen für sich.
  • Beispiele :
    • Urne: UUID: 6e8bc430-9c3a-11d9-9669-0800200c9a66
    • Urne: ISSN: 0167-6423
    • Urne: isbn: 096139210x
    • Amazon Resource Names (ARNs) sind eindeutig identifizierte AWS-Ressourcen.
      • ARN-Format: arn:partition:service:region:account-id:resource

URL:

  • URL-Format: [scheme]://[Domain][Port]/[path]?[queryString]#[fragmentId]
  • :, //,? und # stehen für sich.
  • Schemata sind https, ftp, gopher, mailto, news, telnet, datei, man, info, whatis, ldap ...
  • Beispiele:

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

Premraj
quelle
Kleinere Streitfragen: Zwischen [Domäne] und [Port] sollte ein Doppelpunkt stehen. IE: example.com:1234
Rex Schrader
42

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

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

Grundsätzlich ist ein URI eine allgemeine Kennung, bei der eine URL einen Speicherort und eine URN einen Namen angibt.

Craig Wilson
quelle
1
URLs sind keine echte Teilmenge der URI. Sie können vaid-URLs mit Zeichen [und ]nicht mit einer URI erstellen .
Adam Gent
4
Eckige Klammern sind weder in URIs noch in URLs gültig. Siehe diese Frage, die viele Verweise auf die Spezifikationen enthält: Sind eckige Klammern in URLs zulässig? . Wenn in beiden Fällen eckige Klammern angezeigt werden, sollten diese codiert werden.
Stephen Ostermiller
35

Ein weiteres Beispiel, das ich gerne verwende, wenn ich über URIs nachdenke, 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, da sie nur zum Identifizieren und nicht zum Auffinden von Objekten an sich verwendet wird.

DC
quelle
28

Aufgrund der Schwierigkeiten, URI und URL klar zu unterscheiden, macht W3C meines Erachtens keinen Unterschied mehr zwischen URI und URL ( http://www.w3.org/Addressing/ ).

Manuel Aldana
quelle
Vielleicht habe ich diesen Teil verpasst, aber ich sehe keinen Verweis in dem bereitgestellten Link zu ihnen, der die Unterscheidung zwischen URL und URI aufhebt, nur die Verwirrung anerkennt und möchte, dass Spezifikationen, die fälschlicherweise auf URL verweisen, stattdessen auf Verweis-URI aktualisiert werden.
Tim Gautier
27

Sie sind das gleiche . Ein URI ist eine Verallgemeinerung einer URL. Ursprünglich war geplant, URIs in URLs (Adressen) und URNs (Namen) zu unterteilen, aber dann gab es kaum einen Unterschied zwischen einer URL und URI, und http-URIs wurden als Namespaces verwendet, obwohl sie tatsächlich keine Ressourcen fanden.

Mark Cidade
quelle
Ich dachte, es wäre umgekehrt. Eine URL bezieht sich auf ein konkretes Objekt, und eine URI kann auf dieses oder ein Konzept oder etwas anderes verweisen.
Chris Charabaruk
4
Eine URL findet eine Ressource und ist eine Art URI, die eine Ressource identifiziert.
Mark Cidade
Es ist nur wahr, dass sie dasselbe sind, weil sich die Definition der URL im Laufe der Zeit geändert hat. URLs waren früher ein bestimmter URI-Typ, aber aufgrund der dadurch verursachten Verwirrung definierte das W3C die URL neu, um URI zu bedeuten.
Stephen Ostermiller
25

URI und URL

URI, URL, URN

Wie das obige Bild zeigt, spielen hier drei verschiedene Komponenten eine Rolle. Es ist normalerweise am besten, zur Quelle zu gehen, wenn Sie solche Themen besprechen. Hier ist ein Auszug aus Tim Berners-Lee et al. al. in RFC 3986: URI (Uniform Resource Identifier): Generische Syntax:

Ein Uniform Resource Identifier (URI) ist eine kompakte Folge von Zeichen, die eine abstrakte oder physische Ressource identifiziert.

Ein URI kann weiter als Locator, Name oder beides klassifiziert werden. Der Begriff "Uniform Resource Locator" (URL) bezieht sich auf die Teilmenge der URIs, die zusätzlich zur Identifizierung einer Ressource ein Mittel zum Auffinden der Ressource bieten, indem sie ihren primären Zugriffsmechanismus (z. B. ihren Netzwerk "Standort") beschreiben.

Adiii
quelle
21

URI ist eine Art Superklasse von URLs und URNs. Wikipedia hat einen guten Artikel über sie mit Links zu den richtigen RFCs.

André
quelle
17

Wikipedia gibt Ihnen hier alle Informationen, die Sie benötigen. Zitat aus http://en.wikipedia.org/wiki/URI :

Eine URL ist eine URI, die neben der Identifizierung einer Ressource auch die Möglichkeit bietet, auf die Ressource zu reagieren oder eine Darstellung der Ressource zu erhalten, indem ihr primärer Zugriffsmechanismus oder der "Standort" des Netzwerks beschrieben werden.

Peter Boughton
quelle
16

URL

Eine URL ist eine Spezialisierung des URI, die den Netzwerkspeicherort einer bestimmten Ressource definiert. Im Gegensatz zu einer URN definiert die URL, wie die Ressource abgerufen werden kann. Wir verwenden jeden Tag URLs in Form von http://example.comusw. Eine URL muss jedoch keine HTTP-URL sein, sie kann auch ftp://example.comusw. sein.

URI

Ein URI identifiziert eine Ressource entweder nach Standort oder nach einem Namen oder nach beidem. Meistens verwenden die meisten von uns URIs, die einen Speicherort für eine Ressource definieren. Die Tatsache, dass eine URI Ressourcen sowohl anhand ihres Namens als auch anhand ihres Standorts identifizieren kann, hat meiner Meinung nach zu großer Verwirrung geführt. Ein URI hat zwei Spezialisierungen, die als URL und URN bezeichnet werden.

Unterschied zwischen URL und URI

Ein URI ist eine Kennung für eine Ressource, aber eine URL gibt Ihnen spezifische Informationen zum Abrufen dieser Ressource. Ein URI ist eine URL, und wie ein Kommentator hervorhob, wird es jetzt als falsch angesehen, bei der Beschreibung von Anwendungen eine URL zu verwenden. Wenn die URL sowohl den Speicherort als auch den Namen einer Ressource beschreibt, lautet der zu verwendende Begriff im Allgemeinen URI. Da dies im Allgemeinen der Fall ist, dem die meisten von uns täglich begegnen, ist URI der richtige Begriff.

Sujit
quelle
15

Gemäß RFC 3986 werden URIs aus den folgenden Teilen bestehen:

scheme://authority/path?query

Der URI beschreibt das Protokoll für den Zugriff auf eine Ressource ( Pfad ) oder Anwendung ( Abfrage ) auf einem Server ( Autorität ).

Geben Sie hier die Bildbeschreibung ein

Alle URLs sind URIs, und alle URNs sind URIs, aber alle URIs sind keine URLs.

Bitte beachten Sie für weitere Details:

Wikipedia

Prashanth Sams
quelle
3
Dies lehrt mich nichts, was nicht durch die anderen Antworten abgedeckt wird, die mindestens 6 Jahre alt sind, die viel vollständiger sind und tatsächlich versuchen zu erklären, wie URIs von URLs unterschieden werden.
ccjmne
2
Es ist wichtig zu beachten, dass das Bild ein Venn-Diagramm ist , obwohl es nicht wie ein typisches aussieht. Ich habe Leute gesehen, die versucht haben, es als "Teile der URL" zu interpretieren. Dieses Diagramm besagt nicht , dass URIs mit einer URL beginnen und mit einer URN enden.
Stephen Ostermiller
14

Ein URI identifiziert eine Ressource entweder nach Standort oder nach einem Namen oder nach beidem. Meistens verwenden die meisten von uns URIs, die einen Speicherort für eine Ressource definieren. Die Tatsache, dass eine URI Ressourcen sowohl anhand ihres Namens als auch anhand ihres Standorts identifizieren kann, hat meiner Meinung nach zu großer Verwirrung geführt. Ein URI hat zwei Spezialisierungen, die als URL und URN bezeichnet werden.

Eine URL ist eine Spezialisierung des URI, die den Netzwerkspeicherort einer bestimmten Ressource definiert. Im Gegensatz zu einer URN definiert die URL, wie die Ressource abgerufen werden kann. Wir verwenden jeden Tag URLs in Form von http://stackoverflow.com usw. Eine URL muss jedoch keine HTTP-URL sein, kann es auch sein ftp://example.comusw.

Swapnil
quelle
11

Obwohl die Begriffe URI und URL streng definiert sind, verwenden viele die Begriffe für andere Dinge als für sie definiert.

Nehmen wir zum Beispiel Apache. Wenn http://example.com/foo von einem Apache-Server angefordert wird, sind die folgenden Umgebungsvariablen festgelegt:

  • REDIRECT_URL:: /foo
  • REQUEST_URI:: /foo

Wenn mod_rewrite aktiviert ist, haben Sie auch folgende Variablen:

  • REDIRECT_SCRIPT_URL:: /foo
  • REDIRECT_SCRIPT_URI:: http://example.com/foo
  • SCRIPT_URL:: /foo
  • SCRIPT_URI:: http://example.com/foo

Dies könnte der Grund für einige Verwirrung sein.

Gumbo
quelle
10

Siehe dieses Dokument . Speziell,

Eine URL ist ein URI-Typ, der eine Ressource anhand einer Darstellung ihres primären Zugriffsmechanismus (z. B. ihres Netzwerk- "Speicherorts") und nicht anhand einiger anderer Attribute identifiziert.

Es ist wirklich kein extrem klarer Begriff.

avpx
quelle
10

Nachdem ich die Beiträge gelesen habe, finde ich einige sehr relevante Kommentare. Kurz gesagt, die Verwechslung zwischen den URL- und URI-Definitionen basiert teilweise darauf, welche Definition von welcher abhängt, und auch auf der informellen Verwendung des Wortes URI in der Softwareentwicklung.

Per Definition ist die URL eine Teilmenge des URI [RFC2396]. URI enthalten URN und URL. Sowohl URI als auch URL haben jeweils eine eigene Syntax, die ihnen den Status eines URI oder einer URL verleiht. URN dienen zur eindeutigen Identifizierung einer Ressource, während URL zum Auffinden einer Ressource dient. Beachten Sie, dass eine Ressource mehr als eine URL, aber nur eine einzige URN haben kann. [RFC2611]

Als Webentwickler und Programmierer werden wir uns fast immer mit URL und damit URI befassen. Jetzt ist eine URL speziell so definiert, dass sie alle Teile enthält: Schema-spezifisches Teil, wie zum Beispiel https://stackoverflow.com/questions . Dies ist eine URL und auch eine URI. Betrachten Sie nun einen in die Seite eingebetteten relativen Link wie ../index.html. Dies ist per Definition keine URL mehr. Es ist immer noch eine sogenannte "URI-Referenz" [RFC2396].

Ich glaube, wenn das Wort URI verwendet wird, um sich auf relative Pfade zu beziehen, ist "URI-Referenz" tatsächlich das, woran man denkt. Informell gesehen verwenden Softwaresysteme URI, um auf den relativen Pfad und die URL für die absolute Adresse zu verweisen. In diesem Sinne ist ein relativer Pfad keine URL mehr, sondern immer noch eine URI.

paul r
quelle
10

Hier ist meine Vereinfachung:

URN: eindeutiger Ressourcenname, dh "was" (z. B. Urne: issn: 1234-5678). Dies soll einzigartig sein. In keinem Fall können zwei verschiedene Dokumente dieselbe Urne haben. Ein bisschen wie "uuid"

URL: "wo", um es zu finden (z . B. https://google.com/pub?issnid=1234-5678 .. oder ftp://somesite.com/doc8.pdf )

URI: kann entweder eine URN oder eine URL sein. Diese Fuzzy-Definition ist RFC 3986 zu verdanken, das von W3C und IETF hergestellt wurde.

Die Definition von URI hat sich im Laufe der Jahre geändert, daher ist es für die meisten Menschen sinnvoll, verwirrt zu sein. Jetzt können Sie sich jedoch trösten, dass Sie http://somesite.com/something entweder als URL oder als URI bezeichnen können ... und Sie werden in beiden Fällen Recht haben (zumindest vorerst sowieso). .)

jjolla
quelle
9

Ich habe mich über das Gleiche gewundert und Folgendes gefunden: http://docs.kohanaphp.com/helpers/url .

Mit der url::current()Methode können Sie ein klares Beispiel sehen . Wenn Sie diese haben URL : http://example.com/kohana/index.php/welcome/home.html?query=stringdann verwenden url:current()gibt Ihnen die URI des nach der Dokumentation, ist: Willkommen / home

dierre
quelle
1
Diese Antwort ist falsch. Ein URI ist kein Teil der URL. Vielmehr sind URLs eine Art URI. Außerdem ist der Link in dieser Antwort defekt (und ich kann keinen geeigneten Ersatz finden.)
Stephen Ostermiller
8

URIs entstanden aus der Notwendigkeit, Ressourcen im Web und andere Internetressourcen wie elektronische Postfächer auf einheitliche und kohärente Weise zu identifizieren . Man kann also einen neuen Widget- Typ einführen : URIs zum Identifizieren von Widget- Ressourcen oder tel: URIs zum Weben von Weblinks, die beim Aufrufen zu Telefonanrufen führen.

Einige URIs enthalten Informationen zum Auffinden einer Ressource (z. B. einen DNS-Hostnamen und einen Pfad auf diesem Computer), während andere als reine Ressourcennamen verwendet werden. Die URL ist für Bezeichner reserviert, bei denen es sich um Ressourcen-Locators handelt , einschließlich 'http'-URLs wie http://stackoverflow.com , die die Webseite unter dem angegebenen Pfad auf dem Host identifizieren. Ein weiteres Beispiel sind Mailto-URLs wie mailto: [email protected] , die das Postfach unter der angegebenen Adresse identifizieren.

URNs sind URIs, die als reine Ressourcennamen und nicht als Locators verwendet werden. Der URI: mid: [email protected] ist beispielsweise ein URN, der die E-Mail-Nachricht identifiziert, die ihn in seinem Feld "Nachrichten-ID" enthält. Der URI dient dazu, diese Nachricht von jeder anderen E-Mail-Nachricht zu unterscheiden. Die Adresse der Nachricht wird jedoch in keinem Geschäft selbst angegeben.

dpant
quelle
7

Um dies zu beantworten, werde ich mich auf eine Antwort stützen , die ich in eine andere Frage geändert habe . Ein gutes Beispiel für einen URI ist die Identifizierung einer Amazon S3-Ressource. Lass uns nehmen:

s3://www-example-com/index.html [Feige. 1]

die ich als zwischengespeicherte Kopie von erstellt habe

http://www.example.com/index.html [Feige. 2]

im Amazon S3-US-West-2- Rechenzentrum.

Selbst wenn StackOverflow es mir ermöglichen würde, einen Hyperlink zum s3:// Protokollschema zu erstellen, würde es Ihnen beim Auffinden der Ressource nichts nützen . Weil es eine Ressource identifiziert , Abb. 1 ist eine gültige URI. Es ist auch eine gültige URN, da Amazon verlangt, dass der Bucket (der Begriff für den Teil der URI) in allen Rechenzentren eindeutig ist. Es ist hilfreich beim Auffinden, zeigt jedoch nicht das Rechenzentrum an. Daher funktioniert es nicht als URL.authority

Wie unterscheiden sich URI, URL und URN in diesem Fall?

HINWEIS: RFC 3986 definiert URIs alsscheme://authority/path?query#fragment

Bruno Bronosky
quelle
6

Einfach zu erklären:

Nehmen wir Folgendes an

URI ist dein Name

URL ist Ihre Adresse mit Ihrem Namen, um mit Ihnen zu kommunizieren.

  • Ich heiße Loyola

    Loyola ist URI

  • Meine Adresse ist TN, Chennai 600001.

TN, Chennai 600 001, Loyola ist URL

Ich hoffe du verstehst,

Sehen wir uns nun ein genaues Beispiel an

http://www.google.com/fistpage.html

Oben können Sie mit einer Seite namens firstpage.html ( URI ) über die folgende http://www.google.com/fistpage.html ( URL ) kommunizieren .

Daher ist URI eine Teilmenge der URL, aber nicht umgekehrt.

Loyola
quelle
4
Diese Antwort ist irreführend. Zitat aus Wikipedia "Ein einheitlicher Ressourcenname (URN) funktioniert wie der Name einer Person, während ein URL (Uniform Resource Locator) der Adresse dieser Person ähnelt. Mit anderen Worten: Die URN definiert die Identität eines Elements, während die URL eine Methode zum Suchen bereitstellt es." Auch sowohl URNs als auch URLs sind URIs.
Vegan Sv
4

Ein Uniform Resource Identifier (URI) ist eine Zeichenfolge, die eine Internetressource identifiziert.

Die häufigste URI ist die URL (Uniform Resource Locator), die eine Internetdomänenadresse identifiziert. Ein anderer, nicht so häufiger URI-Typ ist der Universal Resource Name (URN).


quelle
4

Ich fand:


Ein URI (Uniform Resource Identifier) ​​repräsentiert so etwas wie ein großes Bild. Sie können URIs aufteilen / URIs können als Locators (Uniform Resource Locators-URL) oder als Namen (Uniform Resource Name-URN) oder als beides klassifiziert werden. Grundsätzlich funktioniert eine URN wie der Name einer Person, und die URL gibt die Adresse dieser Person an. Kurz gesagt, eine URN definiert die Identität eines Elements, während die URL die Methode zum Auffinden des Elements definiert. Diese beiden Konzepte sind schließlich die URI

Rakeeb Rajbhandari
quelle
2

Die beste (technische) Zusammenfassung imo ist diese

IRI, URI, URL, URN und ihre Unterschiede zu Jan Martin Keil:

IRI, URI, URL, URN und ihre Unterschiede

Jeder, der sich wiederholt mit dem Semantic Web befasst, stößt wiederholt auf die Begriffe IRI , URI , URL und URN . Trotzdem stelle ich häufig fest, dass es Verwirrung über ihre genaue Bedeutung gibt. Und das haben natürlich auch andere bemerkt (siehe zB RFC3305 oder Suche bei Google). Um ehrlich zu sein, war ich von Anfang an selbst verwirrt. Aber eigentlich ist das Problem nicht so komplex. Werfen wir einen Blick auf die Definitionen der genannten Begriffe, um die Unterschiede zu ermitteln:

URI

Ein Uniform Resource Identifier ist eine kompakte Folge von Zeichen, die eine abstrakte oder physische Ressource identifiziert. Der Zeichensatz ist auf US-ASCII beschränkt, mit Ausnahme einiger reservierter Zeichen. Zeichen außerhalb des Satzes zulässiger Zeichen können mithilfe der Prozentcodierung dargestellt werden. Ein URI kann als Locator, Name oder beides verwendet werden. Wenn ein URI ein Locator ist, beschreibt er den primären Zugriffsmechanismus einer Ressource. Wenn ein URI ein Name ist, identifiziert er eine Ressource, indem er ihr einen eindeutigen Namen gibt. Die genauen Spezifikationen der Syntax und Semantik eines URI hängen vom verwendeten Schema ab, das durch die Zeichen vor dem ersten Doppelpunkt definiert wird. [RFC3986]

URNE

Ein einheitlicher Ressourcenname ist eine URI in der Schemaurne, die als persistente, standortunabhängige Ressourcenkennung dienen soll. In der Vergangenheit bezog sich der Begriff auch auf eine URI. [RFC3986] Ein URN besteht aus einem Namespace Identifier (NID) und einem Namespace Specific String (NSS): urn :: Die Syntax und Semantik des NSS ist für jede NID spezifisch. Neben den registrierten NIDs gibt es mehrere weitere NIDs, die den offiziellen Registrierungsprozess nicht durchlaufen haben. [RFC2141]

URL

Ein Uniform Resource Locator ist ein URI, der neben der Identifizierung einer Ressource auch die Lokalisierung der Ressource durch Beschreibung ihres primären Zugriffsmechanismus ermöglicht [RFC3986]. Da es keine genaue Definition der URL anhand einer Reihe von Schemata gibt, bezieht sich "URL ist ein nützliches, aber informelles Konzept" und bezieht sich normalerweise auf eine Teilmenge von URIs, die keine URNs enthalten [RFC3305].

IRI

Ein Internationalized Resource Identifier wird ähnlich wie ein URI definiert, der Zeichensatz wird jedoch auf den Universal Coded Character Set erweitert. Daher kann es alle lateinischen und nicht lateinischen Zeichen außer den reservierten Zeichen enthalten. Anstatt die Definition von URI zu erweitern, wurde der Begriff IRI eingeführt, um eine klare Unterscheidung zu ermöglichen und Inkompatibilitäten zu vermeiden. IRIs sollen URIs bei der Identifizierung von Ressourcen in Situationen ersetzen, in denen der Universal Coded Character Set unterstützt wird. Per Definition ist jeder URI ein IRI. Darüber hinaus gibt es eine definierte surjektive Zuordnung von IRIs zu URIs: Jeder IRI kann genau einem URI zugeordnet werden, aber verschiedene IRIs können demselben URI zugeordnet werden. Daher führt die Rückkonvertierung von einem URI zu einem IRI möglicherweise nicht zum ursprünglichen IRI. [RFC3987]

Zusammenfassend können wir sagen:

IRI is a superset of URI (IRI ⊃ URI)
URI is a superset of URL (URI ⊃ URL)
URI is a superset of URN (URI ⊃ URN)
URL and URN are disjoint (URL ∩ URN = ∅)

Schlussfolgerungen für Semantic Web-Probleme

RDF erlaubt ausdrücklich die Verwendung von IRIs zum Benennen von Entitäten [RFC3987]. Dies bedeutet, dass wir fast jedes Zeichen in Entitätsnamen verwenden können. Auf der anderen Seite müssen wir uns oft mit Software für den frühen Zustand befassen. Daher ist es nicht unwahrscheinlich, dass Probleme mit Nicht-ASCII-Zeichen auftreten. Daher empfehle ich, Nicht-URI-Namen für Entitäten zu vermeiden und http-URIs [LINKED-DATA] zu verwenden. Kurz gesagt: Verwenden Sie nur URLs, um Ihre Entitäten zu benennen. Natürlich können wir auf vorhandene Entitäten verweisen, die durch eine URN benannt sind. Wir sollten jedoch vermeiden, diese Art von Bezeichnern neu zu erstellen.

Mischa
quelle