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


4363

ผู้คนพูดถึงURL s, URI s และURNราวกับว่าพวกมันต่างกัน แต่พวกเขาก็ดูเหมือนกันด้วยตาเปล่า

ความแตกต่างที่แตกต่างระหว่างพวกเขาคืออะไร?


157
URL มีความเฉพาะเจาะจงมากกว่า URI
mk12

30
ผู้ดูแลเว็บใช้คำถามนี้: อะไรคือความแตกต่างระหว่าง URI และ URL
hippietrail

161
แผนภาพ Mini Venn:( URIs ( URLs ) )
icc97

29
ดูเหมือนว่าจะมีความสับสนมากมายเกี่ยวกับ URI กับ URL แม้ว่าผู้ที่พยายามตอบคำถาม มันจะเป็นประโยชน์ต่อทุกคนในการดูตัวอย่างที่เป็นประโยชน์ของ URL ที่ไม่ใช่ URIs ตัวอย่างของ URIs ที่ไม่ใช่ URL และตัวอย่างที่เป็น URL และ URIs
เดนนิส

30
Kathy: "นั่นคือสุนัขของคุณเหรอ?" Bob: "มันจะถูกต้องกว่าที่จะเรียกเขาว่าเขี้ยว" แคธี่ Kathy:“ ไม่เขาเป็นสุนัขคุณเป็นคนอวดรู้”
Yojimbo

คำตอบ:


1746

จากRFC 3986 :

URI สามารถจัดประเภทเพิ่มเติมเป็นตัวระบุตำแหน่งชื่อหรือทั้งสองอย่าง คำว่า "Uniform Resource Locator" (URL) หมายถึงชุดย่อยของ URIs ซึ่งนอกเหนือจากการระบุทรัพยากรแล้วยังมีวิธีการค้นหาทรัพยากรโดยการอธิบายกลไกการเข้าถึงหลัก (เช่นตำแหน่ง "เครือข่ายของเครือข่าย") คำว่า "Uniform Resource Name" (URN) มีการใช้ในอดีตเพื่ออ้างอิงถึง URIs ทั้งสองภายใต้โครงการ "โกศ" [RFC2141]ซึ่งจำเป็นต้องคงไว้ซึ่งความเป็นสากลและคงอยู่ตลอดไปแม้ว่าทรัพยากรจะสิ้นสุดลงหรือไม่พร้อมใช้งานและ ไปยัง URI อื่นใดที่มีคุณสมบัติของชื่อ

ดังนั้น URL ทั้งหมดเป็น URIs (จริงๆแล้วไม่ค่อยชัดเจน - ดูด้านล่าง) และ URN ทั้งหมดเป็น URIs - แต่ URNs และ URL แตกต่างกันดังนั้นคุณไม่สามารถพูดได้ว่า URIs ทั้งหมดเป็น URL

แก้ไข: ก่อนหน้านี้ฉันเคยคิดว่า URL ทั้งหมดเป็น URIs ที่ถูกต้อง แต่ตามความคิดเห็น:

ไม่ใช่ "URL ทั้งหมดเป็น URIs" ขึ้นอยู่กับการตีความของ RFC ตัวอย่างเช่นใน Java ตัวแยกวิเคราะห์ URI ไม่ชอบ[หรือ]และนั่นเป็นเพราะข้อมูลจำเพาะระบุว่า "ไม่ควร" และไม่ใช่ "จะไม่"

เพื่อที่ว่าโคลนจะทำให้น่านน้ำไกลออกไป

หากคุณยังไม่ได้อ่านคำตอบของ Roger Pateฉันก็แนะนำให้ทำเช่นนั้น


15
เฉพาะ URI ที่มี urn: scheme คือ URN URI อาจเป็น URL แบบคลาสสิก URN หรือเพียงแค่ URI ที่ไม่ได้ขึ้นต้นด้วย "urn:" และไม่ได้อ้างอิงตำแหน่งของทรัพยากร
Mark Cidade

18
ไม่ใช่ " URL ทั้งหมดเป็น URIs " ขึ้นอยู่กับการตีความของ RFC ตัวอย่างเช่นใน Java ตัวแยกวิเคราะห์ URI ไม่ชอบ[หรือ]และนั่นเป็นเพราะข้อมูลจำเพาะระบุว่า "ไม่ควร" และไม่ใช่ "จะไม่"
Adam Gent

5
@AdamGent: RFC 3986 1.1.3: "URI สามารถจัดประเภทเพิ่มเติมเป็นตัวระบุตำแหน่งชื่อหรือทั้งสองอย่าง" ดังนั้นหาก URL เป็น URI ชนิดพิเศษนั่นหมายความว่าทุก URL เป็น URI ไม่มัน
Hubert

14
@ AdamGent: ฟังก์ชั่นการใช้งานแบบจาวาและไม่ใช่เชิงบรรทัดฐาน java.net.URIdocตัวเองว่า "URL ที่ทุกคนเป็น URI, abstractly พูด แต่ไม่ทุก URI เป็น URL" และjava.net.URLสิ่งแปลก ๆ เช่นการตรวจสอบความเท่าเทียมกันของ URL โดยการแก้ไขชื่อโฮสต์ให้เป็นที่อยู่ IP (ซึ่งดูเหมือนจะขัดแย้งกับ RFC 3986 วินาที 6 ในตอนแรกและแบ่งโฮสต์เสมือนจริง) ฉันคิดว่านี่หมายถึงว่า Java Standard Library มีพฤติกรรมบางอย่างที่ไม่สอดคล้องกัน
Andrew Janke

3
@ JonSkeet อาจต้องแยกความแตกต่างระหว่างมาตรฐานกับการใช้งานหรือไม่ เช่น "เป็นทางการตาม RFCs URL ทั้งหมดเป็น URIs (RFC excerpt.) แต่การนำไปใช้งานที่มีอยู่อาจไม่ตรงกับข้อมูลจำเพาะอย่างแน่นอนอาจเป็นไปได้สำหรับการทำงานร่วมกันและอาจใช้ URL ที่ไม่ถูกต้องต่อ RFCs และเนื่องจากเป็นพื้นที่ที่ซับซ้อน บางคนและเอกสารอาจใช้ 'URL' เพื่อหมายถึงสิ่งที่แตกต่างจากสิ่งที่ระบุโดย RFC " เรียงลำดับของวิธีการตรวจสอบอีเมลส่วนใหญ่ไม่ตรงกับคำจำกัดความ RFC
Andrew Janke

3840

URI s ระบุและ URL s ค้นหา ; อย่างไรก็ตามตัวระบุตำแหน่งยังเป็นตัวระบุด้วยดังนั้นทุก URL จึงเป็น URI แต่มี URI ที่ไม่ใช่ URL

ตัวอย่าง

  • Roger Pate

นี่คือชื่อของฉันซึ่งเป็นตัวระบุ มันเหมือนกับ URI แต่ไม่สามารถเป็น URL ได้เพราะไม่ได้บอกตำแหน่งของฉันหรือวิธีติดต่อฉัน ในกรณีนี้มันก็เกิดขึ้นเพื่อระบุอย่างน้อย 5 คนอื่น ๆ ในสหรัฐอเมริกาเพียงอย่างเดียว

  • 4914 West Bay Street, Nassau, Bahamas

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

ฉันพูดว่า "ชอบ" เพราะตัวอย่างเหล่านี้ไม่เป็นไปตามไวยากรณ์ที่จำเป็น

ความสับสนที่นิยม

จากWikipedia :

ในการคำนวณ Uniform Resource Locator (URL) เป็นชุดย่อยของ Uniform Resource Identifier (URI) ที่ระบุว่าทรัพยากรที่ระบุนั้นมีอยู่ที่ใดบ้างและกลไกในการเรียกคืน ในการใช้งานที่เป็นที่นิยมและในเอกสารทางเทคนิคจำนวนมากและการสนทนาด้วยวาจามักจะใช้อย่างไม่ถูกต้องเป็นคำพ้องความหมายสำหรับ URI , ...

เนื่องจากความสับสนที่พบบ่อยนี้ผลิตภัณฑ์และเอกสารประกอบจำนวนมากใช้คำหนึ่งคำแทนคำอื่น ๆ อย่างไม่ถูกต้องกำหนดความแตกต่างของตัวเองหรือใช้คำเหล่านั้นอย่างตรงกัน

โกศ

ชื่อ Roger Pate ของฉันอาจเป็นชื่อURN (Uniform Resource Name) ยกเว้นว่าจะมีการควบคุมมากขึ้นและตั้งใจที่จะไม่เหมือนใครในทั้งอวกาศและเวลา

เนื่องจากขณะนี้ฉันใช้ชื่อนี้ร่วมกับคนอื่นจึงไม่ใช่ชื่อที่ไม่ซ้ำกันทั่วโลกและไม่เหมาะสมในฐานะ URN อย่างไรก็ตามแม้ว่าจะไม่มีครอบครัวอื่นที่ใช้ชื่อนี้ แต่ฉันก็ได้รับการตั้งชื่อตามปู่ของฉันดังนั้นมันจึงยังคงไม่ซ้ำกันตลอดเวลา และแม้ว่าที่ไม่ได้กรณีที่เป็นไปได้ของการตั้งชื่อลูกหลานของฉันหลังจากที่ฉันทำให้เรื่องนี้ไม่เหมาะสมเป็นผอบ

URN นั้นแตกต่างจาก URL ในข้อ จำกัด ที่ไม่ซ้ำใครแบบแข็งนี้แม้ว่าทั้งคู่จะใช้ไวยากรณ์ของ URIs ร่วมกันก็ตาม


3
URNs are different from URLs in this rigid uniqueness constraintนี่หมายความว่า URL ไม่ได้ระบุตำแหน่งที่ตั้งโดยไม่ซ้ำหรือไม่
eugene

30
คำตอบของโรเจอร์ให้คำแนะนำที่เป็นประโยชน์ สำหรับคำตอบอย่างเป็นทางการฉันไปที่ W3C ซึ่งตีพิมพ์ " URIs, URL และ URNs: ​​การชี้แจงและคำแนะนำ " ในปี 2544 สรุปสั้น ๆ W3C กล่าวว่ามุมมองร่วมสมัยคือทุกอย่างเป็น URI URL เป็นแนวคิดที่ไม่เป็นทางการไม่ใช่แนวคิดที่เป็นทางการ และความสับสนกลับไปที่ "มุมมองแบบคลาสสิก" ซึ่งพยายามแยกความแตกต่างอย่างชัดเจนระหว่างหมวดหมู่ของ URI (ซึ่ง URL นั้นเป็นหนึ่งหมวดหมู่)
netjeff

5
หรอก Uniform Resource Locator (URL) .. ที่ระบุเป็นทรัพยากรที่ระบุสามารถใช้ได้และกลไกสำหรับการดึงมัน ดังนั้นในคำอื่น ๆ ไม่มีสิ่งเช่น URL "ญาติ"?
Arne

9
เป็น "earth128: Edward-de-Leau / 6000000000569063853" (เฉพาะฉันมากกว่าหลายลิขสิทธิ์) URN, URL หรือ URI หรือไม่?
edelwater

6
@ edelwater: ฉันคิดว่า uri เป็นเพียงระบุคุณ แต่ไม่ได้พูดถึงวิธีการที่จะได้รับคุณถ้าคุณหมายความว่า earth128 เป็นสื่อกลางของการเดินทางระหว่างดาวเคราะห์ :)
user20358

669

URI - Uniform Resource Identifier

URIs เป็นมาตรฐานในการระบุเอกสารโดยใช้สตริงตัวอักษรและสัญลักษณ์สั้น ๆ พวกเขาจะถูกกำหนดโดยRFC 3986 - Uniform Resource Identifier (URI): ทั่วไปไวยากรณ์ URL, URNs และ URC เป็นURI ทุกประเภท

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 ที่ระบุเอกสารเป็นหนังสือประเภทหนึ่ง

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

URC - การอ้างอิงทรัพยากรอย่างสม่ำเสมอ

ชี้ไปที่ข้อมูลเมตาเกี่ยวกับเอกสารแทนที่จะเป็นเอกสาร ตัวอย่างของ URC คือตัวอย่างที่ชี้ไปยังซอร์สโค้ด HTML ของหน้าเช่น:view-source:http://example.com/

Data URI

แทนที่จะค้นหาบนอินเทอร์เน็ตหรือตั้งชื่อข้อมูลสามารถวางโดยตรงใน URI data:,Hello%20Worldตัวอย่างจะเป็น


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

ฉันได้ยินว่าฉันไม่ควรพูด 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)

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

ไม่ได้มีการกำหนด URL ให้เป็นเซตย่อยที่เข้มงวดของ URIs หาก parser อนุญาตให้ใช้อักขระใน URL แต่ไม่ใช่ใน URI แสดงว่ามีข้อบกพร่องใน parser ข้อมูลจำเพาะมีรายละเอียดที่ดีเกี่ยวกับอักขระที่อนุญาตให้ใช้ในส่วนใดของ URL และ URIs อักขระบางตัวอาจได้รับอนุญาตในบางส่วนของ 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 จะถูกลบ


URI / URL Venn Diagram


8
"C: \ myfile" คือ URI, URL หรือ URN หรือไม่มีเลย
bvdb

12
เส้นทางของไฟล์ไม่ใช่ URL หรือ URI ยกเว้นว่าคุณใส่file://คำนำหน้าไว้ แม้ว่าเบราว์เซอร์จะจัดการเส้นทางไฟล์ในรูปแบบที่ไม่ใช่ URL Mozilla เผยแพร่กรณีทดสอบของพวกเขาสำหรับ URL
สตีเฟ่น Ostermiller

2
ดูหัวข้อ 1.1 ของ RFC - "Uniformity ให้ประโยชน์หลายประการซึ่งช่วยให้สามารถใช้ตัวระบุทรัพยากรชนิดต่าง ๆ ในบริบทเดียวกันแม้ว่ากลไกที่ใช้ในการเข้าถึงทรัพยากรเหล่านั้นอาจแตกต่างกัน ในตัวระบุทรัพยากรประเภทต่างๆ ... "
Stephen Ostermiller

คุณพูดถึงmailto:user@example.comว่าเป็น URL แต่มีคำตอบอีกคำตอบด้านล่างว่าเป็น URL หรือไม่ อะไรถูก เป็นทั้ง URN และ URL ใช่ไหม
user31782

4
คำตอบนี้ง่ายต่อการเข้าใจมากขึ้น ฉันสามารถดูภาพตัวอย่างที่ชัดเจนของ URL & URN ได้อย่างชัดเจน และสำหรับทุกคนที่จะอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ ... danielmiessler.com/study/url-uri
vee

253

โดยสรุป: URI จะระบุ URL จะระบุและระบุตำแหน่ง

พิจารณาบทละครของเชคสเปียร์รุ่นRomeo and Julietที่คุณมีสำเนาดิจิทัลในเครือข่ายภายในบ้านของคุณ

urn:isbn:0-486-27557-4คุณสามารถระบุข้อความเป็น
ที่จะเป็น URI แต่เฉพาะมากขึ้นผอบ * เพราะมันชื่อข้อความ

file://hostname/sharename/RomeoAndJuliet.pdfนอกจากนี้คุณยังสามารถระบุข้อความเป็น
ว่ายังจะเป็น URI แต่เฉพาะมากขึ้นURLเพราะมันตั้งข้อความ

* ชื่อทรัพยากรชุด

(โปรดทราบว่าตัวอย่างของฉันดัดแปลงมาจากWikipedia )


6
เป็นประโยชน์ในการจดบันทึก URN จริง (เพื่อดูการเปรียบเทียบกับ URL): โกศ: isbn: 0-486-27557-4
Michael Brewer-Davis

2
@Michael - มันเป็นความเข้าใจของฉันที่ISBN 0486275574ยังตั้งชื่อข้อความและทำให้มีคุณสมบัติเป็น URN ฉันเลือกรูปแบบที่ฉันเชื่อว่าจะคุ้นเคยกับผู้อ่านมากขึ้น
Greg

2
ดังนั้นจะเป็นการดีถ้าจะพูดว่าแฮช (เช่น SHA1) ของไฟล์อาจเป็น URN สำหรับไฟล์นั้น
johnsimer

@johnsimer ไม่คิดอย่างนั้นเพราะคุณสามารถมีสำเนาไฟล์หนึ่งไฟล์ในคอมพิวเตอร์เครื่องเดียวกันซึ่งจะส่งผลให้แฮชเดียวกันและดังนั้นจึงไม่ซ้ำกัน
Dennis98

141

เหล่านี้เป็นคำตอบที่เขียนได้ดีมาก แต่ใช้เวลานาน นี่คือความแตกต่างที่เกี่ยวข้องกับ CodeIgniter :

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

URI - /some/page.html

กล่าวง่ายๆคือ URL เป็นวิธีที่สมบูรณ์ในการระบุแหล่งที่มาที่ใดก็ได้และสามารถมีโปรโตคอลที่แตกต่างกันเช่น FTP, HTTP, SCP และอื่น ๆ

URI เป็นทรัพยากรในโดเมนปัจจุบันดังนั้นจึงต้องการข้อมูลน้อยลง

ในทุก ๆ กรณีที่ CodeIgniter ใช้คำว่า URL หรือ URI นี่คือความแตกต่างที่พวกเขากำลังพูดถึงแม้ว่าในรูปแบบที่ยิ่งใหญ่ของเว็บมันไม่ถูกต้อง 100%


10
คำตอบนี้อาจทำให้เข้าใจง่าย แต่ดูที่บริบทของคำถามของเขา มันจะมีประโยชน์มากขึ้นสำหรับเขาที่อ่านเกี่ยวกับ XML namespaces!
Phil Sturgeon

140
คำตอบนี้ไม่เพียง แต่ผิด แต่ทำให้เข้าใจผิด ตัวอย่างทั้งสองคือ URL และเนื่องจาก URL ทุกรายการยังเป็น URI ซึ่งหมายความว่าทั้งสองตัวอย่างเป็น URIs สำหรับจุดประสงค์ในการแสดงความแตกต่างระหว่าง URIs และ URL สิ่งนี้ไม่มีประโยชน์โดยสิ้นเชิง
Jörg W Mittag

12
นี่คือความแตกต่างที่เกี่ยวข้องกับ CodeIgniter ในทุกกรณีพวกเขาใช้คำว่า URL หรือ URI นี่คือความแตกต่างที่พวกเขากำลังพูดถึง ดังนั้นในรูปแบบที่ยิ่งใหญ่ของเว็บมันไม่ถูกต้อง 100% แต่ในขอบเขตของคำถาม OP (ความแตกต่างใน CodeIgniter) คำตอบนี้ถูกต้องสมบูรณ์
Phil Sturgeon

12
นี่เป็นสิ่งที่ผิด @ JörgWMittagเป็นจุดส่วนใหญ่ URL คือ URIs และเป็น "แบบเต็ม" ดังนั้น "URL" ในคำตอบนี้จึงเป็นทั้ง แต่/some/page.htmlไม่ใช่ URI มันเป็น "ญาติอ้างอิง" ซึ่งเป็นชนิดของ "อ้างอิง URI" เมื่อรวมกับบริบท URI พื้นฐานสามารถแก้ไขเป็น URI ได้ แต่ไม่ใช่ URI ดูมาตรา 4.1 ของ RFC 3986 CodeIgniter อาจใช้คำศัพท์ผิดและควรถูกเรียกออกมา Q (ดังที่แก้ไขในขณะนี้) ไม่ได้ถูกวางกรอบเป็น CodeIgniter เฉพาะ
Andrew Janke

37
สำหรับคนในอนาคตที่อ่านความคิดเห็นเหล่านี้และสับสนเหมือนเดิม: คำตอบนี้ไม่ได้โพสต์สำหรับคำถามนี้ คำถามนี้ไม่เคยเกี่ยวข้องกับ CodeIgniter เลย มีคำถามที่ซ้ำกันซึ่งกล่าวถึง CodeIgniter เฉพาะซึ่งถูกปิดไปแล้วและได้รับคำตอบทั้งหมดสำหรับคำถามนี้ คำตอบนี้เป็นหนึ่งในคำถามที่ถูกย้ายจากคำถามปิดเก่าไปยังคำถามที่ได้รับการป้องกันนี้ ถึงอย่างนั้นฉันคำตอบนี้ทำให้เข้าใจผิด ฉันได้ลงคะแนนแล้ว - คนอื่น ๆ ควรทำเช่นเดียวกันเพราะในบ้านใหม่มันผิด ผู้เขียนควรลบออกหรือยกเลิกการรวม
ArtOfWarfare

92

ก่อนอื่นทำให้จิตใจของคุณสับสนและทำให้ง่ายและคุณจะเข้าใจ

URI => Uniform Resource Identifier ระบุที่อยู่ที่สมบูรณ์ของทรัพยากรเช่นที่ตั้งชื่อหรือทั้งสองอย่าง

URL => Uniform Resource Locator ระบุตำแหน่งของทรัพยากร

URN => ชื่อชุดทรัพยากร ระบุชื่อของทรัพยากร

ตัวอย่าง

เรามีที่อยู่https://www.google.com/folder/page.htmlที่ไหน

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) หรือ URL เท่านั้นหรือ URN เท่านั้น


66

นอกจากคำตอบเล็ก ๆ ที่โพสต์ไว้แล้วนี่คือแผนภาพของ Venn เพื่อสรุปทฤษฎี (จากคำอธิบายที่สวยงามของ Prateek Joshi ):

ป้อนคำอธิบายรูปภาพที่นี่

และตัวอย่าง (จากเว็บไซต์ของ Prateek):

ป้อนคำอธิบายรูปภาพที่นี่


20
ฉันเชื่อว่าภาพประกอบที่สองไม่ถูกต้อง โดยข้อกำหนดurl.spec.whatwg.org/#url-writing URL จะต้องเขียนเป็น URL แบบสัมพันธ์หรือ URL แบบสัมบูรณ์ตามด้วย "#" และส่วนย่อย ดังนั้น#postsตัวระบุส่วนสามารถเป็นส่วนหนึ่งของ URL
ruvim

7
ภาพประกอบทั้งสองขัดแย้งกัน
patapouf_ai

53

นี่เป็นหนึ่งในหัวข้อที่สับสนและไม่เกี่ยวข้องมากที่สุดที่ฉันพบในฐานะผู้เชี่ยวชาญทางเว็บ

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

มีชุดย่อยพื้นฐานสองชุด - URL ซึ่งกำหนดตำแหน่ง (โดยเฉพาะกับเบราว์เซอร์ที่พยายามค้นหาหน้าเว็บ) และ URN ซึ่งกำหนดชื่อเฉพาะของบางสิ่ง

ฉันมักจะคิดว่า URNs คล้ายกับ GUID พวกเขาเป็นเพียงวิธีการมาตรฐานสำหรับการให้ชื่อเฉพาะสำหรับสิ่งต่าง ๆ เช่นเดียวกับการประกาศเนมสเปซที่ใช้ชื่อ บริษัท - มันไม่เหมือนกับว่ามีทรัพยากรอยู่บนเซิร์ฟเวอร์บางแห่งเพื่อให้สอดคล้องกับบรรทัดข้อความนั้น - มันระบุสิ่งที่ไม่ซ้ำกัน

ฉันยังมีแนวโน้มที่จะหลีกเลี่ยงคำว่า URI อย่างสมบูรณ์และอภิปรายสิ่งต่าง ๆ ในรูปของ URL หรือ URN ตามความเหมาะสมเท่านั้นเพราะมันทำให้เกิดความสับสนมาก คำถามที่เราควรลองตอบสำหรับคนไม่ใช่ความหมายมากนัก แต่จะต้องระบุได้อย่างไรเมื่อพบกับคำศัพท์ว่าพวกเขามีความแตกต่างในทางปฏิบัติหรือไม่ซึ่งจะเปลี่ยนวิธีการให้เข้ากับสถานการณ์การเขียนโปรแกรม ตัวอย่างเช่นหากมีคนแก้ไขฉันในการสนทนาและพูดว่า "โอ้นั่นไม่ใช่ URL มันคือ URI" ฉันรู้ว่าพวกเขาเต็มไปด้วยมัน หากมีคนพูดว่า "เรากำลังใช้ URN เพื่อกำหนดทรัพยากร" ฉันมีแนวโน้มที่จะเข้าใจว่าเราตั้งชื่อเฉพาะเท่านั้นไม่ได้ค้นหาในเซิร์ฟเวอร์

ถ้าฉันออกจากฐาน - โปรดแจ้งให้เราทราบ!


4
ไม่ฉันคิดว่าคุณพูดถูก ความหมายของ URI เทียบกับ URL เทียบกับ URL เทียบกับ URI-ref เป็นต้นนั้นไม่มีประโยชน์สำหรับนักพัฒนาส่วนใหญ่เพียงเพราะมันทำให้เกิดการอภิปรายที่ไม่มีจุดหมาย (ไม่มีประสิทธิภาพและไม่มีนัยสำคัญต่อการตัดสินใจ) หากใช้ Google API redirect_urlแทนredirect_uriจะมีใครสนใจหรือไม่

53

เอกลักษณ์ = ชื่อที่มีที่ตั้ง

ทุก URL ( U niform R esource L ocator) คือ URI ( U niform R esource I Dentifier) ​​พูดอย่างเป็นนามธรรม แต่ URI ทุกตัวไม่ใช่ URL มีอีกประเภทย่อยของ URI คือ URN ( U niform R esource N ame) ซึ่งเป็นทรัพยากรที่มีชื่อ แต่ไม่ได้ระบุวิธีการค้นหาพวกเขาเช่น mailto, ข่าว, ISBN คือ URIs แหล่ง

ป้อนคำอธิบายรูปภาพที่นี่

โกศ:

  • รูปแบบ URN: urn:[namespace identifier]:[namespace specific string]
  • โกศ: และ: ยืนหยัดเพื่อตนเอง
  • ตัวอย่าง :
    • โกศ: uuid: 6e8bc430-9c3a-11d9-9669-0800200c9a66
    • โกศ: ISSN: 0167-6423
    • โกศ: ISBN: 096139210x
    • Amazon Resource Names (ARNs)เป็นการระบุทรัพยากร AWS โดยเฉพาะ
      • รูปแบบ ARN: arn:partition:service:region:account-id:resource

URL:

  • รูปแบบ URL: [scheme]://[Domain][Port]/[path]?[queryString]#[fragmentId]
  • : // ,? และ # ยืนสำหรับตัวเอง
  • แบบแผนคือ https, ftp, gopher, mailto, ข่าว, telnet, ไฟล์, ผู้ชาย, ข้อมูล, whatis, ldap ...
  • ตัวอย่าง:

การเปรียบเทียบ:
ในการเข้าถึงบุคคล: การขับรถ (โปรโตคอลอื่น SMS, อีเมล, โทรศัพท์), ที่อยู่ (ชื่อโฮสต์หมายเลขโทรศัพท์อื่น ๆ , อีเมล) และชื่อบุคคล (ชื่อวัตถุที่มีเส้นทางสัมพัทธ์)


การพูดคลุมเครือเล็กน้อย: ควรมีเครื่องหมายโคลอนระหว่าง [โดเมน] และ [พอร์ต] IE: example.com:1234
Rex Schrader

42

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

URL คือชุดย่อยของ URI (ซึ่งมี URN ด้วย)

โดยทั่วไปแล้ว URI เป็นตัวระบุทั่วไปโดยที่ URL จะระบุตำแหน่งที่ตั้งและ URN จะระบุชื่อ


1
URL ไม่ใช่ชุดย่อยของ URI ที่แท้จริง คุณสามารถทำให้ URL vaid กับตัวละคร[และ]แต่ไม่ URI
Adam Gent

4
วงเล็บเหลี่ยมไม่ถูกต้องใน URIs หรือ URL ดูคำถามนี้ซึ่งมีการอ้างอิงจำนวนมากเกี่ยวกับรายละเอียด: อนุญาตให้ใช้วงเล็บเหลี่ยมใน URL หรือไม่ . เมื่อวงเล็บสี่เหลี่ยมปรากฏขึ้นเช่นกันควรเข้ารหัส
Stephen Ostermiller

35

อีกตัวอย่างที่ฉันต้องการใช้เมื่อคิดถึง URIs คือแอตทริบิวต์ xmlns ของเอกสาร XML:

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

ในกรณีนี้ com.mycompany.mynode จะเป็น URI ที่ระบุเนมสเปซ "myPrefix" สำหรับองค์ประกอบทั้งหมดที่ใช้ภายในเอกสาร XML ของฉัน นี่ไม่ใช่ URL เพราะใช้เพื่อระบุเท่านั้นไม่ใช่เพื่อค้นหาบางอย่าง


28

เนื่องจากปัญหาในการแยกความแตกต่างระหว่าง URI และ URL อย่างชัดเจนเท่าที่ฉันจำได้ว่า W3C ไม่ได้สร้างความแตกต่างระหว่าง URI และ URL อีกต่อไป ( http://www.w3.org/Addressing/ )


บางทีฉันอาจพลาดส่วนนั้น แต่ฉันไม่เห็นการอ้างอิงใด ๆ ในลิงก์ที่ให้ไว้เพื่อลบความแตกต่างระหว่าง URL และ URI เพียงยอมรับความสับสนและต้องการรายละเอียดที่อ้างอิง URL ไม่ถูกต้องเพื่ออัปเดต URI อ้างอิงแทน
Tim Gautier

27

พวกเขากำลังสิ่งเดียวกัน URI เป็นลักษณะทั่วไปของ URL ในขั้นต้น URIs ได้รับการวางแผนให้แบ่งออกเป็น URL (ที่อยู่) และ URNs (ชื่อ) แต่ก็มีความแตกต่างกันเล็กน้อยระหว่าง URL และ URI และ http URIs ถูกใช้เป็นเนมสเปซแม้ว่าพวกเขาจะไม่ได้ค้นหาทรัพยากรใด ๆ ก็ตาม


ฉันคิดว่ามันเป็นวิธีอื่น ๆ URL หมายถึงวัตถุที่เป็นรูปธรรมและ URI สามารถอ้างถึงสิ่งนั้นหรือแนวคิดหรือสิ่งอื่นใด
Chris Charabaruk

4
URL หาที่ตั้งของทรัพยากรและเป็น URI ชนิดหนึ่งซึ่งระบุทรัพยากร
Mark Cidade

มันเป็นความจริงเท่านั้นที่พวกเขาเป็นสิ่งเดียวกันเพราะคำจำกัดความของ URL มีการเปลี่ยนแปลงเมื่อเวลาผ่านไป URL ที่เคยเป็น URI ประเภทหนึ่ง แต่เนื่องจากความสับสนที่เกิดขึ้นทำให้ W3C กำหนด URL ใหม่ให้หมายถึง URI
Stephen Ostermiller

25

URI และ URL

URI, URL, URN

ตามภาพด้านบนแสดงว่ามีองค์ประกอบที่แตกต่างกันสามอย่างในการเล่นที่นี่ โดยปกติแล้วจะเป็นการดีที่สุดที่จะไปที่แหล่งที่มาเมื่อพูดถึงเรื่องเหล่านี้ดังนั้นนี่เป็นส่วนหนึ่งของ Tim Berners-Lee และ อัล ใน RFC 3986: Uniform Resource Identifier (URI): ไวยากรณ์ทั่วไป:

Uniform Resource Identifier (URI) เป็นลำดับตัวอักษรขนาดกะทัดรัดที่ระบุทรัพยากรนามธรรมหรือกายภาพ

URI สามารถจัดประเภทเพิ่มเติมเป็นตัวระบุตำแหน่งชื่อหรือทั้งสองอย่าง คำว่า“ Uniform Resource Locator” (URL) หมายถึงชุดย่อยของ URIs ซึ่งนอกเหนือจากการระบุทรัพยากรแล้วยังให้วิธีการในการค้นหาทรัพยากรโดยการอธิบายกลไกการเข้าถึงหลัก (เช่นที่ตั้งเครือข่ายของมัน)



17

Wikipedia จะให้ข้อมูลทั้งหมดที่คุณต้องการที่นี่ อ้างจากhttp://en.wikipedia.org/wiki/URI :

URL คือ URI ที่นอกเหนือจากการระบุทรัพยากรแล้วยังมีวิธีดำเนินการหรือรับการเป็นตัวแทนของทรัพยากรโดยอธิบายกลไกการเข้าถึงหลักหรือ "ตำแหน่ง" ของเครือข่าย


16

URL

URL คือความเชี่ยวชาญของ URI ที่กำหนดตำแหน่งเครือข่ายของทรัพยากรที่เฉพาะเจาะจง ไม่เหมือนกับ URN URL จะกำหนดวิธีการรับทรัพยากร เราใช้ URL ทุกวันในรูปแบบhttp://example.comอื่น ๆ แต่ URL ก็ไม่จำเป็นต้องเป็น URL HTTP ก็สามารถเป็นได้ftp://example.comเช่นกัน

URI

URI จะระบุทรัพยากรทั้งตามที่ตั้งหรือชื่อหรือทั้งสองอย่าง บ่อยกว่านั้นเราส่วนใหญ่ใช้ URIs ที่กำหนดที่ตั้งให้กับทรัพยากร ข้อเท็จจริงที่ว่า URI สามารถระบุทรัพยากรด้วยชื่อและตำแหน่งที่ตั้งทำให้เกิดความสับสนในความคิดของฉัน URI มีสองความเชี่ยวชาญเป็นที่รู้จักกันในชื่อ URL และ URN

ความแตกต่างระหว่าง URL และ URI

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


15

ตามRFC 3986 , URIs ประกอบด้วยชิ้นส่วนต่อไปนี้:

scheme://authority/path?query

URI ที่อธิบายโปรโตคอลสำหรับการเข้าถึงทรัพยากร ( เส้นทาง ) หรือโปรแกรมประยุกต์ ( แบบสอบถาม ) บนเซิร์ฟเวอร์ ( อำนาจ )

ป้อนคำอธิบายภาพที่นี่

URL ทั้งหมดเป็น URIs และ URN ทั้งหมดเป็น URIs แต่ URI ทั้งหมดไม่ใช่ URL

โปรดอ้างอิงรายละเอียดเพิ่มเติม:

วิกิพีเดีย


3
สิ่งนี้ไม่ได้สอนอะไรฉันที่ไม่ครอบคลุมคำตอบอื่น ๆ ที่มีอายุอย่างน้อย 6 ปีและมีความสมบูรณ์มากกว่าและพยายามอธิบายวิธีแยก URIs จาก URL
ccjmne

2
สิ่งสำคัญคือต้องทราบว่าภาพนั้นเป็นไดอะแกรมเวนน์แม้ว่าจะดูไม่เหมือนภาพทั่วไปก็ตาม ฉันเคยเห็นผู้คนพยายามตีความว่าเป็น "ส่วนต่าง ๆ ของ URL" แผนภาพนี้ไม่ได้บอกว่า URIs เริ่มต้นด้วย URL และลงท้ายด้วย URN
Stephen Ostermiller

14

URI จะระบุทรัพยากรทั้งตามที่ตั้งหรือชื่อหรือทั้งสองอย่าง บ่อยกว่านั้นเราส่วนใหญ่ใช้ URIs ที่กำหนดที่ตั้งให้กับทรัพยากร ข้อเท็จจริงที่ว่า URI สามารถระบุทรัพยากรด้วยชื่อและตำแหน่งที่ตั้งทำให้เกิดความสับสนในความคิดของฉัน URI มีสองความเชี่ยวชาญเป็นที่รู้จักกันในชื่อ URL และ URN

URL คือความเชี่ยวชาญของ URI ที่กำหนดตำแหน่งเครือข่ายของทรัพยากรที่เฉพาะเจาะจง ไม่เหมือนกับ URN URL จะกำหนดวิธีการรับทรัพยากร เราใช้ URL ทุกวันในรูปแบบของhttp://stackoverflow.comเป็นต้น แต่ URL ไม่จำเป็นต้องเป็น URL HTTP ก็สามารถเป็นได้ftp://example.comฯลฯ


11

แม้ว่าคำว่า URI และ URL จะได้รับการกำหนดไว้อย่างเคร่งครัด แต่หลายคนใช้ข้อกำหนดสำหรับสิ่งอื่นนอกเหนือจากที่กำหนดไว้

ลองยกตัวอย่าง Apache หากมีการร้องขอhttp://example.com/fooจากเซิร์ฟเวอร์ Apache คุณจะมีชุดตัวแปรสภาพแวดล้อมดังต่อไปนี้

  • REDIRECT_URL: /foo
  • REQUEST_URI: /foo

เมื่อเปิดใช้งาน mod_rewrite คุณจะมีตัวแปรเหล่านี้ด้วย:

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

นี่อาจเป็นสาเหตุของความสับสน


10

ดูเอกสารนี้ โดยเฉพาะอย่างยิ่ง

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

มันไม่ได้เป็นคำที่ชัดเจนมากจริงๆ


10

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

By definition URL เป็นชุดย่อยของ URI [RFC2396] URI มี URN และ URL ทั้ง URI และ URL แต่ละรายการมีไวยากรณ์เฉพาะของตนเองที่ให้สถานะเป็น URI หรือ URL URN ใช้สำหรับระบุทรัพยากรโดยไม่ซ้ำในขณะที่ URL ใช้สำหรับค้นหาทรัพยากร โปรดทราบว่าทรัพยากรสามารถมีได้มากกว่าหนึ่ง URL แต่มีเพียง URN เดียว [RFC2611]

ในฐานะนักพัฒนาเว็บและโปรแกรมเมอร์เรามักจะเกี่ยวข้องกับ URL ดังนั้น URI ตอนนี้ URL ที่ถูกกำหนดให้เป็นพิเศษเพื่อมีทุกโครงการส่วนโครงการเฉพาะส่วนอย่างเช่นhttps://stackoverflow.com/questions นี่คือ URL และเป็น URI ด้วย ตอนนี้ให้พิจารณาลิงก์ที่เกี่ยวข้องที่ฝังอยู่ในหน้าเช่น ../index.html นี่ไม่ใช่ URL ตามคำจำกัดความอีกต่อไป ยังคงเป็นสิ่งที่เรียกว่า "การอ้างอิง URI" [RFC2396]

ฉันเชื่อว่าเมื่อคำว่า URI ถูกใช้เพื่ออ้างถึงเส้นทางสัมพัทธ์ "อ้างอิง URI" เป็นจริงสิ่งที่กำลังคิด ดังนั้นอย่างไม่เป็นทางการระบบซอฟต์แวร์ใช้ URI เพื่ออ้างถึงเส้นทางที่สัมพันธ์กันและ URL สำหรับที่อยู่ที่แน่นอน ดังนั้นในแง่นี้เส้นทางสัมพัทธ์จึงไม่ใช่ URL อีกต่อไป แต่ยังคงเป็น URI


10

นี่คือความเรียบง่ายของฉัน:

URN: ชื่อทรัพยากรที่ไม่ซ้ำกันเช่น "อะไร" (เช่น urn: issn: 1234-5678) สิ่งนี้มีความหมายว่าเป็นเอกลักษณ์ .. เนื่องจากไม่มีเอกสารที่แตกต่างกันสองรายการที่สามารถมีโกศเดียวกันได้ เล็กน้อยเช่น "uuid"

URL: "ตำแหน่ง" เพื่อค้นหา (เช่นhttps://google.com/pub?issnid=1234-5678 .. หรือ ftp://somesite.com/doc8.pdf )

URI: สามารถเป็น URN หรือ URL ก็ได้ คำจำกัดความฟัซซี่นี้ต้องขอบคุณ RFC 3986 ที่ผลิตโดย W3C และ IETF

คำจำกัดความของ URI ได้เปลี่ยนไปในช่วงหลายปีที่ผ่านมาดังนั้นจึงเหมาะสมสำหรับคนส่วนใหญ่ที่จะสับสน อย่างไรก็ตามตอนนี้คุณสามารถปลอบใจในความจริงที่ว่าคุณสามารถอ้างถึงhttp://somesite.com/somethingเป็น URL หรือ URI ... คุณจะถูกทางใดทางหนึ่ง (อย่างน้อย fot เวลาอยู่แล้ว .. .)


9

ผมสงสัยเกี่ยวกับสิ่งเดียวกันและฉันได้พบนี้: http://docs.kohanaphp.com/helpers/url

คุณสามารถดูตัวอย่างที่ชัดเจนโดยใช้url::current()วิธีการ หากคุณมีURLนี้: การhttp://example.com/kohana/index.php/welcome/home.html?query=stringใช้url:current()จะให้URIแก่คุณซึ่งตามเอกสารประกอบคือ: welcome / home


1
คำตอบนี้ผิด URI ไม่ใช่ส่วนหนึ่งของ URL URL ค่อนข้างเป็นประเภทของ URI นอกจากนี้ลิงก์ในคำตอบนี้ใช้งานไม่ได้ (และฉันไม่สามารถหาสิ่งทดแทนที่เหมาะสมได้)
Stephen Ostermiller

8

URIs มาจากความต้องการในการระบุแหล่งข้อมูลบนเว็บและแหล่งข้อมูลทางอินเทอร์เน็ตอื่น ๆเช่นกล่องจดหมายอิเล็กทรอนิกส์ในรูปแบบที่สม่ำเสมอและเชื่อมโยงกัน ดังนั้นหนึ่งสามารถแนะนำวิดเจ็ตรูปแบบใหม่: URIs เพื่อระบุทรัพยากรของวิดเจ็ตหรือใช้tel: URIs เพื่อให้มีลิงก์ทางเว็บทำให้เกิดการโทรออกเมื่อเรียกใช้

URIs บางตัวให้ข้อมูลเพื่อค้นหาทรัพยากร (เช่นชื่อโฮสต์ DNS และเส้นทางบนเครื่องนั้น) ในขณะที่บางรายการใช้เป็นชื่อทรัพยากรบริสุทธิ์ URL ที่สงวนไว้สำหรับตัวระบุว่าเป็นชี้แหล่งทรัพยากรรวมทั้ง URL ที่ 'http เช่นhttp://stackoverflow.comซึ่งระบุหน้าเว็บที่เส้นทางที่กำหนดบนโฮสต์ อีกตัวอย่างหนึ่งคือ URL 'mailto' เช่นmailto: fred@mail.orgซึ่งระบุกล่องจดหมายตามที่อยู่ที่ระบุ

URNคือ URIs ที่ใช้เป็นชื่อทรัพยากรบริสุทธิ์แทนที่จะเป็นตัวระบุตำแหน่ง ตัวอย่างเช่น URI: mid: 0E4FC272-5C02-11D9-B115-000A95B55BC8@stackoverflow.comเป็น URN ที่ระบุข้อความอีเมลที่มีอยู่ในช่อง 'Message-Id' URI ทำหน้าที่แยกแยะข้อความนั้นจากข้อความอีเมลอื่น แต่มันไม่ได้ให้ที่อยู่ของข้อความในร้านค้าใด ๆ


7

เพื่อที่จะตอบคำถามนี้ฉันจะพึ่งพาคำตอบผมแก้ไขเพื่อคำถามอื่น ตัวอย่างที่ดีของ URI คือวิธีที่คุณระบุทรัพยากร Amazon S3 มาดูกัน:

s3://www-example-com/index.html [รูปที่. 1]

ซึ่งฉันสร้างเป็นสำเนาแคชของ

http://www.example.com/index.html [รูปที่. 2]

ในดาต้าเซ็นเตอร์S3-US-West-2ของ Amazon

แม้ว่า StackOverflow จะอนุญาตให้ฉันเชื่อมโยงหลายมิติไปยังรูปแบบs3:// โปรโตคอลมันจะไม่ทำอะไรที่ดีในการหาทรัพยากร เพราะมันระบุทรัพยากร , มะเดื่อ 1คือ URI ที่ถูกต้อง นอกจากนี้ยังเป็น URN ที่ถูกต้องเนื่องจาก Amazon ต้องการให้ที่ฝากข้อมูล (คำศัพท์เฉพาะสำหรับauthorityส่วนของ URI) นั้นไม่ซ้ำกันในดาต้าเซ็นเตอร์ เป็นประโยชน์ในการค้นหา แต่ไม่ได้ระบุดาต้าเซ็นเตอร์ ดังนั้นจึงไม่ทำงานเป็น URL

ดังนั้นกรณีนี้ URI, URL และ URN แตกต่างกันอย่างไร

หมายเหตุ: RFC 3986 กำหนด URIs เป็นscheme://authority/path?query#fragment


6

ง่ายต่อการอธิบาย:

ให้ถือว่าสิ่งต่อไปนี้

URI คือชื่อของคุณ

URL คือที่อยู่ของคุณพร้อมชื่อของคุณเพื่อสื่อสารกับคุณ

  • ฉันชื่อ Loyola

    Loyola คือ URI

  • ที่อยู่ของฉันคือ TN, Chennai 600001

TN, Chennai 600 001, Loyola คือ URL

หวังว่าคุณจะเข้าใจ,

ตอนนี้ให้ดูตัวอย่างที่แม่นยำ

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

ในด้านบนคุณสามารถสื่อสารกับหน้าเว็บที่ชื่อว่าfirstpage.html ( URI ) โดยใช้http://www.google.com/fistpage.html ( URL ) ต่อไปนี้

ดังนั้น URI จึงเป็น URL ย่อย แต่ไม่ใช่ในทางกลับกัน


4
คำตอบนี้ทำให้เข้าใจผิด อ้างจาก Wikipedia "ฟังก์ชั่น Uniform Resource Name (URN) เช่นชื่อของบุคคลในขณะที่ Uniform Resource Locator (URL) มีลักษณะคล้ายกับที่อยู่ของบุคคลนั้นในคำอื่น ๆ : URN กำหนดตัวตนของรายการในขณะที่ URL มีวิธีการค้นหา มัน." ทั้ง URN และ URL ก็เป็น URIs ด้วย
มังสวิรัติ Sv

4

Uniform Resource Identifier (URI) คือสตริงของอักขระที่ระบุอินเทอร์เน็ตอินเทอร์เน็ต

URI ที่พบบ่อยที่สุดคือ Uniform Resource Locator (URL) ซึ่งระบุที่อยู่โดเมนอินเทอร์เน็ต ประเภทอื่นที่ไม่ใช่ URI ทั่วไปคือ Universal Resource Name (URN)


4

ฉันพบ:


Uniform Resource Identifier (URI) แสดงถึงภาพรวมขนาดใหญ่ คุณสามารถแบ่ง URIs / URIs สามารถจัดประเภทเป็นตัวระบุตำแหน่ง (ทรัพยากรตัวระบุตำแหน่ง - URL) หรือเป็นชื่อ (ชื่อทรัพยากรรูปแบบเดียวกัน -URN) หรือทั้งสองอย่าง โดยทั่วไปแล้วฟังก์ชัน URN เช่นชื่อของบุคคลและ URL แสดงที่อยู่ของบุคคลนั้น เรื่องสั้นที่สั้นมาก URN จะกำหนดตัวตนของไอเท็มในขณะที่ URL ที่ให้ไว้จะกำหนดวิธีการค้นหาในที่สุดแนวคิดที่ห่อหุ้มสองแนวคิดนี้คือ URI


2

IMOสรุปทางเทคนิคที่ดีที่สุดคืออันนี้

IRI, URI, URL, URN และความแตกต่างจาก Jan Martin Keil:

IRI, URI, URL, URN และความแตกต่าง

จัดการทุกคนที่มีความหมายเว็บซ้ำ ๆ มาเจอเงื่อนไขIRI , URI , URLและผอบ อย่างไรก็ตามฉันมักสังเกตว่ามีความสับสนบางอย่างเกี่ยวกับความหมายที่แท้จริงของพวกเขา และแน่นอนว่าคนอื่นก็สังเกตเห็นเช่นกัน (ดูเช่น RFC3305 หรือค้นหาใน Google) พูดตามตรงฉันก็สับสนในตอนแรก แต่จริงๆแล้วปัญหาไม่ซับซ้อน ลองมาดูคำจำกัดความของคำที่กล่าวถึงเพื่อดูความแตกต่าง:

URI

ทรัพยากรตัวบ่งชี้เครื่องแบบเป็นลำดับที่มีขนาดกะทัดรัดของตัวอักษรที่ระบุเป็นทรัพยากรที่เป็นนามธรรมหรือทางกายภาพ ชุดของอักขระถูก จำกัด ไว้ที่ US-ASCII ไม่รวมอักขระที่สงวนไว้บางตัว อักขระที่อยู่นอกชุดของอักขระที่อนุญาตสามารถแสดงโดยใช้การเข้ารหัสแบบร้อยละ URI สามารถใช้เป็นตัวระบุตำแหน่งชื่อหรือทั้งสองอย่าง หาก URI เป็นตัวระบุตำแหน่งจะอธิบายกลไกการเข้าถึงหลักของทรัพยากร หาก URI เป็นชื่อจะระบุทรัพยากรโดยให้ชื่อที่ไม่ซ้ำ ข้อมูลจำเพาะที่แน่นอนของไวยากรณ์และความหมายของ URI นั้นขึ้นอยู่กับโครงการที่ใช้ซึ่งกำหนดโดยอักขระก่อนเครื่องหมายโคลอนแรก [RFC3986]

โกศ

Uniform ชื่อทรัพยากรเป็น URI ในโกศโครงการวัตถุประสงค์เพื่อใช้เป็นถาวรสถานที่อิสระระบุทรัพยากร ในอดีตคำนี้ยังอ้างถึง URI ใด ๆ [RFC3986] URN ประกอบด้วย Namespace Identifier (NID) และ Namespace Specific String (NSS): urn :: ไวยากรณ์และซีแมนทิกส์ของ NSS นั้นเฉพาะเจาะจงสำหรับแต่ละ NID นอกเหนือจาก NID ที่ลงทะเบียนแล้วยังมี NID อีกหลายตัวที่ไม่ผ่านกระบวนการลงทะเบียนอย่างเป็นทางการ [RFC2141]

URL

Uniform Resource Locatorเป็น URI ที่นอกเหนือไปจากการระบุทรัพยากรให้หมายถึงตำแหน่งของทรัพยากรโดยการอธิบายกลไกการเข้าถึงหลัก [RFC3986] เนื่องจากไม่มีคำจำกัดความที่แน่นอนของ URL โดยใช้ชุดของแบบแผน "URL เป็นแนวคิดที่มีประโยชน์ แต่ไม่เป็นทางการ" ซึ่งมักจะอ้างถึงชุดย่อยของ URIs ที่ไม่มี URNs [RFC3305]

IRI

ตัวระบุทรัพยากรที่เป็นสากลถูกกำหนดคล้ายกับ URI แต่ชุดอักขระจะถูกขยายไปยังชุดอักขระที่กำหนดรหัสสากล ดังนั้นจึงสามารถมีอักขระละตินและไม่ใช่ละตินยกเว้นอักขระที่สงวนไว้ แทนที่จะขยายคำจำกัดความของ URI คำว่า IRI ได้ถูกนำเสนอเพื่อให้มีความแตกต่างที่ชัดเจนและหลีกเลี่ยงความไม่ลงรอยกัน IRIs มีวัตถุประสงค์เพื่อแทนที่ URIs ในการระบุทรัพยากรในสถานการณ์ที่รองรับชุดอักขระรหัสสากล ตามคำนิยามทุก URI คือ IRI นอกจากนี้ยังมีการทำแผนที่แบบ Surjective IRIs กับ URIs ที่กำหนดไว้: IRI ทุกตัวสามารถแมปกับ URI เดียวทั้งหมด แต่ IRIs ที่แตกต่างกันอาจจับคู่กับ URI เดียวกัน ดังนั้นการแปลงกลับจาก URI เป็น IRI อาจไม่สร้าง IRI ดั้งเดิม [RFC3987]

สรุปเราสามารถพูดได้:

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 = ∅)

สรุปสำหรับปัญหาทางเว็บแบบ Semantic

RDF อนุญาตให้ใช้ IRIs อย่างชัดเจนเพื่อตั้งชื่อเอนทิตี [RFC3987] ซึ่งหมายความว่าเราสามารถใช้อักขระเกือบทุกตัวในชื่อเอนทิตี ในทางกลับกันเรามักจะต้องจัดการกับซอฟต์แวร์สถานะต้น ดังนั้นจึงไม่น่าจะพบปัญหาในการใช้อักขระที่ไม่ใช่ ASCII ดังนั้นฉันขอแนะนำให้หลีกเลี่ยงชื่อที่ไม่ใช่ URI สำหรับเอนทิตีและแนะนำให้ใช้ http URIs [LINKED-DATA] หากต้องการกล่าวสั้น ๆ : ใช้ URL เพื่อตั้งชื่อเอนทิตีของคุณ แน่นอนเราสามารถอ้างถึงเอนทิตีที่มีอยู่ที่มีชื่อโดย URN อย่างไรก็ตามเราควรหลีกเลี่ยงการสร้างตัวระบุประเภทนี้ใหม่

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