อะไรคือความแตกต่างระหว่าง URI และ URL?


44

ฉันได้อ่านหน้าเหล่านี้แล้ว:

ฉันรู้พื้นฐานเกี่ยวกับ URL, URN และ URI; แต่แตกต่างกันเล็กน้อย สิ่งที่ฉันไม่เข้าใจคือในหน้าเช่น: http://www.bernzilla.com/item.php?id=100ส่วนใดคือ URL, URN และ URI!
URI นั้นเป็นส่วนหนึ่งยกเว้น URL และ URN

ภาพจากวิกิพีเดีย

แก้ไข:
จาก w3c.org:

URL เป็นประเภทของ URI ที่ระบุทรัพยากรผ่านการเป็นตัวแทนของกลไกการเข้าถึงหลัก (เช่น "ตำแหน่ง" เครือข่าย) แทนที่จะเป็นคุณลักษณะอื่น ๆ ที่อาจมี

จากwww.damnhandy.com :

ตอนนี้ถือว่าไม่ถูกต้องที่จะใช้ URL เมื่ออธิบายแอปพลิเคชัน

ตอนนี้เป็นidคุณลักษณะหรือไม่ ส่วนที่เกี่ยวกับการใช้งานคืออะไร? PHP เป็นแอปพลิเคชันหรือไม่


3
คำถามนี้ถูกถามใน Stack Overflow สองสามครั้งและได้รับความสนใจและการตอบสนองที่ดี: URI และ URL แตกต่างกันอย่างไร
hippietrail

คำตอบ:


42

URI / URL Venn Diagram

URL - Locator ทรัพยากรที่เหมือนกัน

มีข้อมูลเกี่ยวกับวิธีดึงทรัพยากรจากที่ตั้ง ตัวอย่างเช่น:

  • 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 (URL สัมพัทธ์มีประโยชน์เฉพาะในบริบทของ URL อื่น)

URL มักจะเริ่มต้นด้วยโปรโตคอล ( http) และมักจะมีข้อมูลเช่นชื่อโฮสต์เครือข่าย ( example.com) และมักจะเป็นเส้นทางเอกสาร ( /foo/mypage.html) URL อาจมีพารามิเตอร์ข้อความค้นหาและตัวระบุส่วน

URN - ชื่อทรัพยากรที่เหมือนกัน

ระบุทรัพยากรด้วยชื่อที่ไม่ซ้ำใครและถาวร มันมักจะเริ่มต้นด้วยคำนำหน้าurn: ตัวอย่างเช่น:

  • urn:isbn:0451450523 เพื่อระบุหนังสือตามหมายเลข ISBN
  • urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 ตัวระบุที่ไม่ซ้ำกันทั่วโลก
  • urn:publishing:book - เนมสเปซ XML ที่ระบุเอกสารเป็นหนังสือประเภทหนึ่ง

URNs สามารถระบุความคิดและแนวคิด พวกเขาไม่ได้ จำกัด อยู่ที่การระบุเอกสาร เมื่อ URN แสดงเอกสารมันสามารถแปลเป็น URL โดย "resolver" สามารถดาวน์โหลดเอกสารจาก URL ได้

URI - Uniform Resource Identifier

URIs รวม URL, URNs และวิธีอื่น ๆ ในการระบุทรัพยากร

ตัวอย่างของ URI ที่ไม่เป็น URL มิได้ผอบจะเป็นข้อมูล URIdata:,Hello%20Worldเช่น ไม่ใช่ URL หรือ URN เนื่องจาก URI มีข้อมูลอยู่ มันไม่ได้ตั้งชื่อหรือบอกวิธีการค้นหาผ่านเครือข่าย

นอกจากนี้ยังมีการอ้างอิงทรัพยากรแบบสม่ำเสมอ (URCs) ซึ่งชี้ไปที่ข้อมูลเมตาเกี่ยวกับเอกสารแทนที่จะเป็นเอกสารเอง ตัวอย่างของ URC จะเป็นตัวระบุสำหรับการดูซอร์สโค้ดของหน้าเว็บ: view-source:http://example.com/. URC เป็น URI ประเภทอื่นที่ไม่ใช่ URL หรือ URN

คำถามที่พบบ่อย

ฉันได้ยินว่าฉันไม่ควรพูด URL อีกต่อไปแล้วเพราะอะไร

ข้อมูลจำเพาะ W3 สำหรับ HTML กล่าวว่าhrefของแท็กจุดยึดสามารถมี URI ไม่ใช่แค่ URL <a href="urn:isbn:0451450523">คุณควรจะสามารถที่จะใส่ในโกศเช่น เบราว์เซอร์ของคุณจะแก้ไข URN นั้นเป็น URL และดาวน์โหลดหนังสือให้คุณ

เบราว์เซอร์ใด ๆ รู้วิธีดึงเอกสารโดย URN จริงหรือไม่

ไม่ใช่ที่ฉันรู้ แต่เว็บเบราว์เซอร์ที่ทันสมัยใช้โครงร่างข้อมูล URI

ความแตกต่างระหว่าง URL และ URI เกี่ยวข้องกับอะไรไม่ว่าจะเป็นแบบสัมพัทธ์หรือแบบสัมบูรณ์

ไม่ทั้ง URL แบบสัมพัทธ์และแบบสัมบูรณ์คือ URL (และ URIs)

ความแตกต่างระหว่าง URL และ URI เกี่ยวข้องกับว่ามีพารามิเตอร์ข้อความค้นหาหรือไม่

ไม่ทั้ง URL ที่มีและไม่มีพารามิเตอร์ข้อความค้นหาคือ URL (และ URIs)

ความแตกต่างระหว่าง URL และ URI เกี่ยวข้องกับว่ามีตัวระบุส่วนหรือไม่

ไม่ทั้ง URL ที่มีและไม่มีตัวระบุส่วนคือ URL (และ URIs)

แต่ตอนนี้ W3C ไม่ได้บอกว่า URL และ URIs เหมือนกันหรือไม่

ใช่. W3C ตระหนักว่ามีความสับสนมากมายเกี่ยวกับเรื่องนี้ พวกเขาออกเอกสารชี้แจง URIที่บอกว่าตอนนี้ตกลงที่จะใช้ URL ข้อกำหนดและ URI แทนกันได้ (หมายถึง URI) ไม่มีประโยชน์อีกต่อไปที่จะแบ่งเซกเมนต์ของ URI ออกเป็นประเภทต่างๆเช่น URL, URN และ URC

URI สามารถเป็นทั้ง URL และ URN ได้หรือไม่?

คำจำกัดความของ URN ตอนนี้หลวมกว่าที่ฉันได้กล่าวไว้ข้างต้น RFC ล่าสุดเกี่ยวกับยูริกล่าวว่าขณะนี้ URI ใด ๆ สามารถผอบ (ที่ไม่ว่าจะเริ่มต้นด้วยurn:) ตราบใดที่มันมี "คุณสมบัติของชื่อที่." นั่นคือมันไม่ซ้ำกันทั่วโลกและถาวรแม้เมื่อทรัพยากรสิ้นสุดอยู่หรือจะไม่พร้อมใช้งาน ตัวอย่าง: ยูริที่ใช้ใน HTML doctypes http://www.w3.org/TR/html4/strict.dtdเช่น URI นั้นจะตั้งชื่อประเภทการเปลี่ยนผ่าน HTML4 ต่อไปแม้ว่าหน้าในเว็บไซต์ w3.org จะถูกลบ


สิ่งที่ทำให้ฉันสับสนเกี่ยวกับการชี้แจง W3C และความแตกต่างของ URL / URI คือจริง ๆ แล้วเอกสารเว็บเซิร์ฟเวอร์จำนวนมากอธิบาย URL เป็นสตริงคำขอทั้งหมดและ URI เป็น "ส่วนที่ติดตามโปรโตคอล" มันยังอ้างอิงส่วนนั้นด้วยชื่อตัวแปร $ uri ตัวอย่างเช่น: nginx.com/blog/creating-nginx-rewrite-rules นี่ไม่ใช่ "แก้ไข" อย่างเคร่งครัดโดยคำจำกัดความ W3C ที่ดูเหมือนว่า แต่ฉันคิดว่ามีประโยชน์มากที่สุด
ไมค์

1
ยูริสเข้าใจผิดอย่างกว้างขวาง หลายคนคิดว่า URI เป็นส่วนหนึ่งของ URL เช่น URL ที่เกี่ยวข้องหรือทำตามโปรโตคอล สิ่งนี้ไม่ถูกต้อง แต่ความคิดเหล่านั้นทำให้เป็นเอกสารเซิร์ฟเวอร์หรือในการเขียนโปรแกรม API ค่อนข้างบ่อย
Stephen Ostermiller

10

ฉันคิดว่าบทความเหล่านั้นอธิบายได้ค่อนข้างดี ในการตอบคำถามของคุณทั้งหมดนี้เป็น URL:

http://www.bernzilla.com/item.php?id=100

แต่ละบิตของมัน - http: www.bernzilla.comและต่อ ๆ ไปมีชื่อเป็นของตัวเอง:

  • http: เป็นรูปแบบ
  • www เป็นโดเมนย่อย
  • bernzilla.com เป็นโดเมน
  • com เป็นโดเมนระดับบนสุดหรือ TLD
  • (อาจมีโฟลเดอร์หรือเส้นทางที่นั่นเช่น /dir/item.php แต่ไม่มี)
  • item.php เป็นหน้าหรือชื่อไฟล์ที่มีนามสกุลเป็น php
  • id = 100 คือสตริงการสืบค้น

ฉันเห็นไดอะแกรมนั้นจากวิกิพีเดียว่าทำไมคุณถึงถาม แผนภาพนั้นบอกว่ามี URI สองประเภท - URL และ URNs และบิตเลือนตรงกลางคือเมื่อบางสิ่งสามารถเป็นได้ทั้งคู่


ขอบคุณสำหรับคำตอบ. ฉันแก้ไขคำถามของฉัน คุณลองดูอีกครั้งได้ไหม
เลิกทำ

ฉันไม่เข้าใจคำพูดนั้นเกี่ยวกับการอธิบายแอปพลิเคชันและฉันไม่สามารถเห็นความคิดเห็นที่มีคนชี้ให้เห็น ฉันจะอัปเดตคำตอบเพื่ออธิบายส่วนต่าง ๆ
paulmorriss

@paul คุณไม่ได้หมายถึงURIในบรรทัดแรกใช่ไหม id=100ไม่ใช่ตำแหน่งแต่เป็นตัวบ่งชี้
DisgruntledGoat

ฉันคิดว่าฉันหมายถึง URL สำหรับบางเว็บไซต์หากคุณเปลี่ยน ID คุณจะได้รับ "เพจ" ที่แตกต่างกันตามปกติ การอ่านคำจำกัดความของทรัพยากรบนวิกิพีเดียฉันคิดว่าหน้าเป็นตัวอย่างของทรัพยากร
paulmorriss

7

ไม่ใช่ในกรณีที่ URL ที่คุณพูดถึงประกอบด้วยทั้ง URL และ URN

http://www.bernzilla.com/item.php?id=100 เป็นทั้ง URL และ URI

URI โดยพื้นฐานคือชุด URL และ URNs มีการทับซ้อนกันระหว่าง URL และ URN เช่นกัน

URI จะระบุทรัพยากรทั้งตามที่ตั้งหรือชื่อหรือทั้งสองอย่าง

ดังนั้น URL ใด ๆ ที่เป็น URI URN ใด ๆ ก็คือ URI แต่ไม่ใช่ทุก ๆ URI ที่เป็น URL

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.