Soru Bir URI, bir URL ve bir URN arasındaki fark nedir?


İnsanlar hakkında konuşuyor URLs, URIs ve URNFarklı şeylermiş gibi, ama çıplak gözle aynı görünüyorlar.

Aralarındaki ayırt edilebilir farklar nelerdir?


3710
2017-10-06 21:26


Menşei


URL, URI’dan daha belirgindir. - mk12
Web yöneticileri Tor şu soruyu üstleniyor: URI ve URL arasındaki fark nedir? - hippietrail
Mini venn şeması: ( URIs ( URLs ) ) - icc97
Yine de, soruyu cevaplamaya çalışanlar tarafından bile URI ve URL hakkında çok fazla kafa karışıklığı var gibi görünüyor. URI olmayan URL'lerin pratik örneklerini, URL olmayan URI'ların örneklerini ve URL'leri olan örnekleri görmek herkesin yararına olacaktır. ve URI'ları. - Dennis
Kathy: "Bu senin köpeğin mi?" Bob: "Ona köpek demesi daha doğru olur." Kathy: "Hayır, o bir köpek. Sen, efendim, bir akıl hastası." - Yojimbo


Cevaplar:


itibaren RFC 3986:

Bir URI ayrıca bir yer belirleyici, bir isim veya her ikisi olarak sınıflandırılabilir.      "Tekdüzen Kaynak Konum Belirleyicisi" (URL) terimi, URI'ların alt kümesini belirtir.      Bir kaynağı tanımlamanın yanı sıra,      birincil erişim mekanizmasını tanımlayarak kaynağı bulma      (ör., ağı "konumu"). "Tekdüzen Kaynak Adı" terimi      (URN), her iki URI’ya      Küresel olarak benzersiz olması gereken "urn" şeması [RFC2141]      Kaynak var olduğunda ya da ortadan kalktığında bile kalıcıdır      kullanılamaz ve bir adın özelliklerine sahip başka bir URI'ye.

Dolayısıyla tüm URL'ler URI'lardır (aslında tam olarak değil - aşağıya bakın) ve tüm URN'ler URI'lardır - ancak URN'ler ve URL'ler farklıdır, dolayısıyla tüm URI'ların URL olduğunu söyleyemezsiniz.

DÜZENLEME: Daha önce tüm URL'lerin geçerli URI'lar olduğunu, ancak yorumlara göre olduğunu düşündüm:

Değil "tüm URL'ler URI'lardır". RFC'nin yorumlanmasına bağlıdır. Örneğin Java'da URI ayrıştırıcısı sevmez [ veya ] ve çünkü spec "olmamalı" ve "olmaz" demez.

Böylece maalesef suları daha da çamurluyor.

Henüz okumadıysanız Roger Pate'nin cevabıBunu yapmayı da tavsiye ederim.


1516
2017-10-06 21:29



Sadece urn: şeması URI'lar URN'lerdir. Bir URI, klasik bir URL, bir URN veya yalnızca "urn:" ile başlamamış ve bir kaynağın yerini belirtmeyen bir URI olabilir. - Mark Cidade
RFC 2396'nın uzun zaman önce RFC 3986 tarafından kullanıldığını unutmayın (ancak bu gerçekleri değiştirmez ...) - Julian Reschke
Değil "tüm URL'ler URI'lardır"RFC'nin yorumlanmasına bağlıdır. Örneğin, Java'da URI ayrıştırıcısı sevmez [ veya ] ve çünkü spec "olmamalı" ve "olmaz" demez. - Adam Gent
@AdamGent: RFC 3986 1.1.3: "Bir URI ayrıca bir yer belirleyici, bir ad veya her ikisi olarak sınıflandırılabilir." Dolayısıyla, URL özel bir URI ise, bu her URL'nin bir URI olduğu anlamına gelir. Öyle değil mi? - Hubert
@AdamGent: Bu bir Java uygulama örneği gibi görünüyor ve normatif değil. java.net.URIdoktor kendisi "her URL, soyut bir şekilde konuşan bir URI'dir, ancak her URI bir URL değildir" der. Ve java.net.URL ana bilgisayar adlarını IP adreslerine çözerek (ilk etapta RFC 3986 sec 6 ile çelişen ve w sanal konakları bozan) URL'lerin eşitliğini kontrol etmek gibi garip şeyler yapar. Bence bu, Java Standard Library'nin bazı tutarsız sınıf davranışlarına sahip olduğu anlamına gelir. - Andrew Janke


URIs tanımlamak ve URLbulun; ancak, konum belirleyicileri de tanımlayıcıdırBu nedenle, her URL aynı zamanda bir URI'dir, ancak URL olmayan URI'ler vardır.

Örnekler

  • Roger Pate

Bu benim adım, bir tanımlayıcı. Konum bilgisi veya bana nasıl ulaşacağınız hakkında hiçbir şey söylemediğinden, bir URI gibidir, ancak bir URL olamaz. Bu durumda, aynı zamanda, yalnızca ABD'de en az 5 kişiyi tanımlamak da söz konusudur.

  • 4914 West Bay Street, Nassau, Bahamalar

Bu, bu fiziksel konum için bir tanımlayıcı olan bir konumlandırıcıdır. Hem bir URL hem de URI’ye benzer (tüm URL’ler URI’lar olduğundan) ve ayrıca beni tanımlar dolaylı olarak ".. sakini" olarak. Bu durumda, beni benzersiz bir şekilde tanımlar, ama bir oda arkadaşı alırsam bu değişir.

"Beğen" diyorum çünkü bu örnekler gerekli sözdizimini takip etmiyor.

Popüler karışıklık

itibaren Vikipedi:

Hesaplamada, Tekdüzen Kaynak Konum Belirleyicisi (URL), tanımlanmış bir kaynağın nerede bulunduğunu ve onu geri getirme mekanizmasını belirleyen Tekdüzen Kaynak Tanımlayıcısının (URI) bir alt kümesidir. Popüler kullanımda ve birçok teknik belgede ve sözlü tartışmalarda, yanlış URI için eşanlamlı olarak sıklıkla kullanılır.... [vurgu benim]

Bu yaygın karışıklık nedeniyle, birçok ürün ve dokümantasyon yanlış bir şekilde diğerini yerine kullanır, kendi ayrımlarını atar veya bunları eş anlamlı olarak kullanır.

uRNS

Benim adım Roger Pate, URN (Tekdüzen Kaynak İsmi) çok daha düzenli ve karşısında benzersiz olması amaçlanmıştır her ikisi de uzay ve zaman.

Şu anda bu ismi diğer insanlarla paylaştığım için, küresel olarak benzersiz değil ve bir URN olarak uygun olmayacaktır. Ancak, başka bir aile bu ismi kullanmasa bile, babamın büyükbabamından sonra ismini verdim, bu yüzden hala zaman içinde benzersiz olmazdı. Ve hatta o durum böyle değildi, benim torunlarımın peşinden gelme olasılığını bir URN olarak uygunsuz hale getirdi.

URN'ler, her ikisi de URI'lerin sözdizimini paylaştıkları halde, bu rijit teklik kısıtlamasındaki URL'lerden farklıdır.


3524
2017-12-31 06:32



URNs are different from URLs in this rigid uniqueness constraint Bu, URL’lerin bir konumu benzersiz olarak tanımlamadığı anlamına mı geliyor? - eugene
Roger'ın cevabı iyi pragmatik tavsiye sağlar. Resmi cevap için yayınlayan W3C'ye gidiyorum.URI'lar, URL'ler ve URN'ler: Açıklamalar ve ÖnerilerÖzetle, W3C, çağdaş görüşün her şeyin bir URI olduğunu, URL'nin resmi bir kavram değil, gayri resmi bir kavram olduğunu ve karışıklık kategorileri arasında katı bir ayrım yapmaya çalışan bir “klasik görüş” e geri döndüğünü söylüyor. URI (hangi URL'nin bir kategori olduğu). - netjeff
..a Tekdüzen Kaynak Konum Belirleyicisi (URL) .. belirlenen bir kaynağın nerede kullanılacağını belirtir ve onu geri almak için mekanizma. Yani başka bir deyişle, "göreli" bir URL diye bir şey yok mu? - Arne
"Earth128: Edward-de-Leau / 6000000000569063853" (birden fazla multiverse üzerinde benzersiz ben) bir URN, bir URL veya bir URI mı? - edelwater
@edelwater: Sanırım bu bir uri, sadece sizi tanımladığı gibi, ama size bir şey söylemediğini söyler, eğer dünyayı kastetmedikçe (12) gezegensel bir seyahat ortamıdır :) - user20358


URI - Tekdüzen Kaynak Tanımlayıcı

URI'ler, kısa bir sayı, harf ve sembol dizesi kullanarak belgelerin tanımlanması için bir standarttır. Onlar tarafından tanımlanmıştır RFC 3986 - Tekdüzen Kaynak Tanımlayıcısı (URI): Genel Sözdizimi. URL'ler, URN'ler ve URC'lerin hepsi türleri URI.

URL - Tekdüzen Kaynak Konum Belirleyicisi

Bir kaynağın bulunduğu yerden nasıl alınacağıyla ilgili bilgi içerir. Örneğin:

  • 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 (Yalnızca başka bir URL bağlamında faydalı göreli bir URL)

URL'ler her zaman bir protokolle başlar (http) ve genellikle ağ ana bilgisayar adı gibi bilgileri içerirexample.com) ve genellikle bir belge yolu (/foo/mypage.html). URL'lerde sorgu parametreleri ve parça tanımlayıcıları olabilir.

URN - Tekdüzen Kaynak İsmi

Bir kaynağı benzersiz ve kalıcı bir adla tanımlar, ancak mutlaka internette nasıl bulunacağınızı söylemez. Genellikle önek ile başlar urn:  Örneğin:

  • urn:isbn:0451450523 Bir kitabı ISBN numarasıyla tanımlamak.
  • urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 küresel olarak benzersiz bir tanımlayıcı
  • urn:publishing:book - Belgeyi bir kitap türü olarak tanımlayan bir XML ad alanı.

URN'ler fikir ve kavramları tanımlayabilir. Belgeleri tanımlamakla sınırlı değiller. Bir URN bir belgeyi temsil ettiğinde, bir "çözümleyici" tarafından bir URL'ye çevrilebilir. Belge daha sonra URL'den indirilebilir.

URC - Tekdüzen Kaynak Atıf

Belgenin kendisinden ziyade bir belge hakkındaki meta verilere işaret eder. Bir URC örneği, bir sayfanın HTML kaynak koduna işaret eden bir örnektir: view-source:http://example.com/

Veri URI'si

İnternete yerleştirmek veya isimlendirmek yerine, doğrudan bir URI'ye yerleştirilebilir. Bir örnek olurdu data:,Hello%20World.


sık sorulan Sorular

Artık URL dememem gerektiğini duydum, neden?

HTML için W3 özellikleri href bir çapa etiketinin sadece bir URL değil, bir URI içerebilir. Gibi bir URN koymak mümkün olmalıdır <a href="urn:isbn:0451450523">. Tarayıcınız daha sonra bu URN’yi bir URL’ye çözer ve kitabı sizin için indirir.

Herhangi bir tarayıcı aslında belgelerin URN tarafından nasıl alınacağını biliyor mu?

Bildiğimden değil, modern web tarayıcısı veri URI şemasını uyguluyor.

URL ve URI arasındaki farkın göreceli veya mutlak olup olmadığıyla ilgili bir şey var mı?

Hayır. Hem göreli hem de mutlak URL'ler URL’lerdir (ve URI’lar).

URL ve URI arasındaki farkın, sorgu parametrelerine sahip olup olmadığıyla ilgili bir şey var mı?

Hayır. Sorgu parametrelerine sahip olan ve olmayan her iki URL de URL’lerdir (ve URI’lar).

URL ve URI arasındaki farkın bir parça tanımlayıcısı olup olmadığıyla ilgili bir ilgisi var mı?

Hayır. Parça tanımlayıcılarına sahip ve içermeyen her iki URL de URL’lerdir (ve URI’lar).

URL ve URI arasındaki fark hangi karakterlere izin verildiği ile ilgili bir şey var mı?

Hayır. URL'ler, URI'lerin katı bir alt kümesi olarak tanımlanmıştır. Bir ayrıştırıcı bir URL'de bir karaktere izin veriyor ancak bir URI'ye izin vermiyorsa, ayrıştırıcıda bir hata var demektir. Spesifikasyonlar, hangi URL’lerin ve URI’lerin hangi bölümlerinde izin verildiği konusunda ayrıntılı bilgi verir. Bazı karakterlere yalnızca URL’nin bazı bölümlerinde izin verilebilir, ancak yalnızca karakterler URL’ler ve URI’ler arasında bir fark değildir.

Ama şimdi W3C, URL'lerin ve URI'ların aynı şey olduğunu söylemiyor mu?

Evet. W3C, bunun hakkında bir sürü karışıklık olduğunu fark etti. Onlar bir URI açıklama belgesi Bu, terimleri URL ve URI'yi dönüşümlü olarak (URI anlamında) kullanmak için artık Tamam olduğunu söylüyor. URI'leri URL, URN ve URC gibi farklı türlere kesin olarak ayırmak artık yararlı değildir.

Bir URI hem bir URL hem de bir URN olabilir mi?

URN'nin tanımı, şimdi yukarıda belirttiğimden daha gevşek. URI'lerde en son RFC herhangi bir URI'nin artık bir URN olabileceğini söylüyor. urn:) "bir ismin özellikleri" olduğu sürece. Yani: Kaynak var olduğunda ya da kullanılamaz hale geldiğinde bile, küresel olarak benzersiz ve kalıcıdır. Bir örnek: gibi HTML doktrinlerinde kullanılan URI'lar http://www.w3.org/TR/html4/strict.dtd. Bu URI, w3.org web sitesindeki sayfa silinmiş olsa bile, HTML4 geçişli doctype adını kullanmaya devam edecektir.


URI/URL Venn Diagram


476
2018-03-04 21:51



"C: \ myfile" bir URI, URL veya URN? ya da bunların hiçbiri. - bvdb
Bir dosya yolu, bir URL veya URI file:// önek üstünde. Tarayıcılar genellikle URL olmayan biçimlendirilmiş dosya yollarını işlemektedir. Mozilla, test dosyalarını dosya URL'leri için yayınlıyor. - Stephen Ostermiller
Neden "üniforma"? - hkBattousai
Görmek RFC bölüm 1.1 - "Tekdüzelik çeşitli faydalar sağlar. Farklı kaynak tanımlayıcılarının aynı bağlamda kullanılmasına izin verir, hatta bu kaynaklara erişmek için kullanılan mekanizmalar farklılık gösterse bile. Farklı kaynak tanımlayıcıları arasında ortak sözdizimsel kuralların tekdüze yorumlanmasını sağlar. ..." - Stephen Ostermiller
Bu cevabı anlamak çok daha kolay. URL'lerin ve URN'nin gerçek örneğinin net resimlerini görebiliyorum. Ve bunun hakkında daha fazla şey okuyan herkes için ... danielmiessler.com/study/url-uri - vee


Özetle: bir URI tanımlar, bir URL tanımlar ve bulur.

Shakespeare'in oyununun belirli bir versiyonunu düşünün Romeo ve JulietEv ağınızda dijital bir kopyanız var.

Metni şu şekilde tanımlayabilirsiniz: urn:isbn:0-486-27557-4.
Bu bir URI, ama daha spesifik olarak bir URN* Çünkü bu metni adlandırır.

Metni de file://hostname/sharename/RomeoAndJuliet.pdf.
Bu aynı zamanda bir URI, ama daha spesifik olarak bir URL Çünkü bu metni bulur.

* Tekdüzen Kaynak İsmi

(Örneğimin uyarlanmış olduğunu unutmayın. Vikipedi)


233
2017-12-31 06:51



Gerçek URN'yi (bir URL ile nasıl karşılaştırıldığını görmek için) not etmek yararlı olur: urn: isbn: 0-486-27557-4 - Michael Brewer-Davis
@Michael - Bu benim anlayışım ISBN 0486275574 ayrıca metni isimlendirir ve böylece bir URN olarak nitelendirir. Okuyuculara daha aşina olacağına inandığım bir format seçiyorum. - Greg
Bir dosyanın karma (ör. SHA1), bu dosya için bir URN olabileceğini söylemek mantıklı olur mu? - johnsimer
@johnsimer Bunu düşünmeyin, aynı bilgisayarda bir dosyanın bir kopyasına sahip olabileceğiniz gibi, aynı karmaşaya yol açacak ve bu yüzden benzersiz değil. - Dennis98


Bunlar çok iyi yazılmış ama uzun soluklu cevaplar. İşte fark CodeIgniter söz konusu olduğunda:

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

URI - /some/page.html

Basitçe ifade edersek, URL, herhangi bir yeri herhangi bir yerde tanımlamak için tam yoldur ve FTP, HTTP, SCP, vb. Gibi farklı protokollere sahip olabilir.

URI, geçerli alandaki bir kaynaktır, bu nedenle bulunması daha az bilgiye ihtiyaç duyar.

CodeIgniter'in URL veya URI kelimesini kullandığı her durumda, bu, web'in büyük şemasında olsa da,% 100 doğru değildir.


125
2017-12-31 08:58



Bu cevap aşırı basitleştirilmiş olabilir, ancak sorusunun bağlamına bakın. XML ad alanlarını karıştırmak ona daha yararlı olacak! - Phil Sturgeon
Bu cevap sadece yanlış değil, aynı zamanda yanıltıcıdır. Her ikisi de örnekler URL’lerdir. Ve her URL aynı zamanda bir URI olduğu için, bu demektir ki her ikisi de örnekler URI'lardır. URI'ler ve URL'ler arasındaki farkı göstermek amacıyla, bu tamamen işe yaramaz. - Jörg W Mittag
Bu, CodeIgniter ile ilgili olan farktır. Her durumda, URL veya URI kelimesini kullanırlar, bahsettikleri fark budur. Bu nedenle, web'in büyük şemasında,% 100 doğru değil, OP'nin sorusu kapsamında (CodeIgniter'deki fark), bu cevap mükemmel bir şekilde doğrudur. - Phil Sturgeon
Bu yanlış. @ JörgWMittag çoğunlukla noktadır. URL'ler URI'lardır ve "tam olarak nitelendirilmiştir"; bu nedenle bu cevaptaki "URL" her ikisi de. Fakat /some/page.html URI değildir. Bir "akraba-ref", bir çeşit "URI-referansı" dır. Bir taban URI içeriği ile birleştirildiğinde, bir URI'ye çözülebilir, ancak kendi başına bir URI değildir. Görmek RFC 3986'nın Bölüm 4.1. CodeIgniter'ın muhtemelen yanlış terimleri kullanması ve çağrılması gerekenler; Q (halihazırda düzenlendiği haliyle) CodeIgniter'e özgü olarak çerçevelenmez. - Andrew Janke
Bu yorumları okuyan ve benimki gibi kafamda olan insanlar için: Bu cevap bu soru için yayınlanmadı. Bu sorunun CodeIgniter ile hiçbir ilgisi olmadı. Özellikle kapalı olan ve tüm cevaplarının bu soruya aktarıldığı CodeIgniter'den söz eden yinelenen bir soru vardı. Bu cevap, eski kapalı sorudan bu korunan soruya taşınmış olanlardan biriydi. Öyle bile olsa, bu cevap yanıltıcıdır. Onu reddettim - diğerleri de aynısını yapmalı, çünkü yeni evinde, yanlış. Yazar onu silmeli veya birleştirme işlemi geri alınmalıdır. - ArtOfWarfare


Yanıtların küçük bir eki, daha önce yayınlanmıştır, bu teoriyi özetlemek için bir Venn diyagramıdır (Prateek Joshi'nin güzelinden) açıklama):

enter image description here

Ve bir örnek (ayrıca Prateek'in web sitesinden):

enter image description here


64
2017-10-16 17:46



İkinci resimde yanlış olduğuna inanıyorum. Şartname ile url.spec.whatwg.org/#url-writing  Bir URL, isteğe bağlı olarak "#" ve bir parça tarafından izlenen göreli bir URL veya mutlak bir URL olarak yazılmalıdır. Yani, #posts parça tanımlayıcısı URL'nin bir parçası olabilir - ruvim
Bu sadece yanlış - Engineer Dollery
İki illüstrasyon birbiriyle çelişiyor. - patapouf_ai


Bu bir web uzmanı olarak karşılaştığım en kafa karıştırıcı ve muhtemelen ilgisiz konulardan biridir.

Anladığım kadarıyla, bir URI, kabul edilen bir formattan sonra, bir şeyin ve onun konumunun benzersiz ismini (kimliğini) tanımlayabilen bir şeyin bir açıklamasıdır.

İki temel alt grup vardır: URL'leri (özellikle bir web sayfasına bakmaya çalışan bir tarayıcı) ve bir şeyin benzersiz ismini tanımlayan URN'leri tanımlayan URL'ler vardır.

URN'leri GUID'lere benzer olarak düşünmeye eğilimliyim. Onlar sadece şeyler için benzersiz isimler sağlamak için standart bir metodolojidir. Bir şirketin adını kullanan ad alanı bildiriminde olduğu gibi - bu metin satırına karşılık gelen bir yerde bir sunucu üzerinde oturan bir kaynak olmadığı gibi - sadece bir şeyi benzersiz olarak tanımlar.

Aynı zamanda URI terimini de tamamen ortadan kaldırmaya ve sadece uygun şekilde URL ya da URN açısından konuşmaya eğilimliyim, çünkü bu çok karışıklığa neden oluyor. İnsanlara cevap vermeyi gerçekten denememiz gereken soru semantik değil, bir programlama durumuna yaklaşımı değiştirecek herhangi bir pratik fark olup olmadığına bakılmaksızın terimleri ne zaman karşılaştığını tanımlamaktır. Örneğin, birisi beni görüşmelerde düzeltir ve "evet, bu bir URI değil, bu bir URI" diyorlar. Birisi "kaynağı tanımlamak için bir URN kullanıyoruz" diyorsa, anlaman daha muhtemeldir, sadece bir sunucu üzerinde bulamıyor, benzersiz olarak adlandırıyoruz.

Eğer üsse inersem - lütfen bana bildirin!


52
2017-12-01 13:07



Hayır, bence haklısın. URI ve URL'ye karşı URL vs URI-ref vb. Semantikleri çoğu geliştiriciye yararsızdır, çünkü sadece anlamsız (karar vermeden üretken, karar vermede önemsiz) tartışmalar yürütür. Google API kullanılıyorsa redirect_url yerine redirect_urikimsenin umurunda olur mu? - Alexander Pritchard