ผู้คนพูดถึงURL s, URI s และURNราวกับว่าพวกมันต่างกัน แต่พวกเขาก็ดูเหมือนกันด้วยตาเปล่า
ความแตกต่างที่แตกต่างระหว่างพวกเขาคืออะไร?
( URIs ( URLs ) )
ผู้คนพูดถึงURL s, URI s และURNราวกับว่าพวกมันต่างกัน แต่พวกเขาก็ดูเหมือนกันด้วยตาเปล่า
ความแตกต่างที่แตกต่างระหว่างพวกเขาคืออะไร?
( URIs ( URLs ) )
คำตอบ:
จาก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ฉันก็แนะนำให้ทำเช่นนั้น
[
หรือ]
และนั่นเป็นเพราะข้อมูลจำเพาะระบุว่า "ไม่ควร" และไม่ใช่ "จะไม่"
java.net.URI
docตัวเองว่า "URL ที่ทุกคนเป็น URI, abstractly พูด แต่ไม่ทุก URI เป็น URL" และjava.net.URL
สิ่งแปลก ๆ เช่นการตรวจสอบความเท่าเทียมกันของ URL โดยการแก้ไขชื่อโฮสต์ให้เป็นที่อยู่ IP (ซึ่งดูเหมือนจะขัดแย้งกับ RFC 3986 วินาที 6 ในตอนแรกและแบ่งโฮสต์เสมือนจริง) ฉันคิดว่านี่หมายถึงว่า Java Standard Library มีพฤติกรรมบางอย่างที่ไม่สอดคล้องกัน
URI s ระบุและ URL s ค้นหา ; อย่างไรก็ตามตัวระบุตำแหน่งยังเป็นตัวระบุด้วยดังนั้นทุก URL จึงเป็น URI แต่มี URI ที่ไม่ใช่ URL
นี่คือชื่อของฉันซึ่งเป็นตัวระบุ มันเหมือนกับ URI แต่ไม่สามารถเป็น URL ได้เพราะไม่ได้บอกตำแหน่งของฉันหรือวิธีติดต่อฉัน ในกรณีนี้มันก็เกิดขึ้นเพื่อระบุอย่างน้อย 5 คนอื่น ๆ ในสหรัฐอเมริกาเพียงอย่างเดียว
นี่คือตัวระบุตำแหน่งซึ่งเป็นตัวระบุสำหรับตำแหน่งทางกายภาพนั้น เป็นเหมือนทั้ง URL และ URI (เนื่องจาก URL ทั้งหมดเป็น URIs) และยังระบุว่าฉันเป็น "ผู้มีถิ่นที่อยู่ .. " โดยทางอ้อม ในกรณีนี้มันระบุตัวฉันไม่ซ้ำกัน แต่มันจะเปลี่ยนไปถ้าฉันได้เพื่อนร่วมห้อง
ฉันพูดว่า "ชอบ" เพราะตัวอย่างเหล่านี้ไม่เป็นไปตามไวยากรณ์ที่จำเป็น
จากWikipedia :
ในการคำนวณ Uniform Resource Locator (URL) เป็นชุดย่อยของ Uniform Resource Identifier (URI) ที่ระบุว่าทรัพยากรที่ระบุนั้นมีอยู่ที่ใดบ้างและกลไกในการเรียกคืน ในการใช้งานที่เป็นที่นิยมและในเอกสารทางเทคนิคจำนวนมากและการสนทนาด้วยวาจามักจะใช้อย่างไม่ถูกต้องเป็นคำพ้องความหมายสำหรับ URI , ...
เนื่องจากความสับสนที่พบบ่อยนี้ผลิตภัณฑ์และเอกสารประกอบจำนวนมากใช้คำหนึ่งคำแทนคำอื่น ๆ อย่างไม่ถูกต้องกำหนดความแตกต่างของตัวเองหรือใช้คำเหล่านั้นอย่างตรงกัน
ชื่อ Roger Pate ของฉันอาจเป็นชื่อURN (Uniform Resource Name) ยกเว้นว่าจะมีการควบคุมมากขึ้นและตั้งใจที่จะไม่เหมือนใครในทั้งอวกาศและเวลา
เนื่องจากขณะนี้ฉันใช้ชื่อนี้ร่วมกับคนอื่นจึงไม่ใช่ชื่อที่ไม่ซ้ำกันทั่วโลกและไม่เหมาะสมในฐานะ URN อย่างไรก็ตามแม้ว่าจะไม่มีครอบครัวอื่นที่ใช้ชื่อนี้ แต่ฉันก็ได้รับการตั้งชื่อตามปู่ของฉันดังนั้นมันจึงยังคงไม่ซ้ำกันตลอดเวลา และแม้ว่าที่ไม่ได้กรณีที่เป็นไปได้ของการตั้งชื่อลูกหลานของฉันหลังจากที่ฉันทำให้เรื่องนี้ไม่เหมาะสมเป็นผอบ
URN นั้นแตกต่างจาก URL ในข้อ จำกัด ที่ไม่ซ้ำใครแบบแข็งนี้แม้ว่าทั้งคู่จะใช้ไวยากรณ์ของ URIs ร่วมกันก็ตาม
URNs are different from URLs in this rigid uniqueness constraint
นี่หมายความว่า URL ไม่ได้ระบุตำแหน่งที่ตั้งโดยไม่ซ้ำหรือไม่
URIs เป็นมาตรฐานในการระบุเอกสารโดยใช้สตริงตัวอักษรและสัญลักษณ์สั้น ๆ พวกเขาจะถูกกำหนดโดยRFC 3986 - Uniform Resource Identifier (URI): ทั่วไปไวยากรณ์ URL, URNs และ URC เป็นURI ทุกประเภท
มีข้อมูลเกี่ยวกับวิธีดึงทรัพยากรจากที่ตั้ง ตัวอย่างเช่น:
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:isbn:0451450523
เพื่อระบุหนังสือตามหมายเลข ISBNurn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66
ตัวระบุที่ไม่ซ้ำกันทั่วโลกurn:publishing:book
- เนมสเปซ XML ที่ระบุเอกสารเป็นหนังสือประเภทหนึ่งURN สามารถระบุแนวคิดและแนวคิดได้ พวกเขาไม่ได้ จำกัด อยู่ที่การระบุเอกสาร เมื่อ URN แสดงเอกสารมันสามารถแปลเป็น URL โดย "resolver" สามารถดาวน์โหลดเอกสารจาก URL ได้
ชี้ไปที่ข้อมูลเมตาเกี่ยวกับเอกสารแทนที่จะเป็นเอกสาร ตัวอย่างของ URC คือตัวอย่างที่ชี้ไปยังซอร์สโค้ด HTML ของหน้าเช่น:view-source:http://example.com/
แทนที่จะค้นหาบนอินเทอร์เน็ตหรือตั้งชื่อข้อมูลสามารถวางโดยตรงใน URI data:,Hello%20World
ตัวอย่างจะเป็น
ข้อมูลจำเพาะ W3 สำหรับ HTML กล่าวว่าhref
ของแท็กจุดยึดสามารถมี URI ไม่ใช่แค่ URL <a href="urn:isbn:0451450523">
คุณควรจะสามารถที่จะใส่ในโกศเช่น เบราว์เซอร์ของคุณจะแก้ไข URN นั้นเป็น URL และดาวน์โหลดหนังสือให้คุณ
ไม่ใช่ที่ฉันรู้ แต่เว็บเบราว์เซอร์ที่ทันสมัยใช้โครงร่างข้อมูล URI
ไม่ทั้ง URL แบบสัมพันธ์และแบบสัมบูรณ์คือ URL (และ URIs)
ไม่ทั้ง URL ที่มีและไม่มีพารามิเตอร์ข้อความค้นหาคือ URL (และ URIs)
ไม่ทั้ง URL ที่มีและไม่มีตัวระบุส่วนคือ URL (และ URIs)
ไม่ได้มีการกำหนด URL ให้เป็นเซตย่อยที่เข้มงวดของ URIs หาก parser อนุญาตให้ใช้อักขระใน URL แต่ไม่ใช่ใน URI แสดงว่ามีข้อบกพร่องใน parser ข้อมูลจำเพาะมีรายละเอียดที่ดีเกี่ยวกับอักขระที่อนุญาตให้ใช้ในส่วนใดของ URL และ URIs อักขระบางตัวอาจได้รับอนุญาตในบางส่วนของ URL เท่านั้น แต่อักขระอย่างเดียวไม่ได้มีความแตกต่างระหว่าง URL และ URIs
ใช่. W3C ตระหนักว่ามีความสับสนมากมายเกี่ยวกับเรื่องนี้ พวกเขาออกเอกสารชี้แจง URIที่บอกว่าตอนนี้ตกลงที่จะใช้ URL ข้อกำหนดและ URI แทนกันได้ (หมายถึง URI) ไม่มีประโยชน์อีกต่อไปที่จะแบ่งเซกเมนต์ของ URI ออกเป็นประเภทต่างๆเช่น URL, URN และ URC อย่างเคร่งครัด
คำจำกัดความของ URN ตอนนี้หลวมกว่าที่ฉันได้กล่าวไว้ข้างต้น RFC ล่าสุดเกี่ยวกับยูริกล่าวว่าขณะนี้ URI ใด ๆ สามารถผอบ (ที่ไม่ว่าจะเริ่มต้นด้วยurn:
) ตราบใดที่มันมี "คุณสมบัติของชื่อที่." นั่นคือ: เป็นสากลและไม่ซ้ำกันแม้ในขณะที่ทรัพยากรสิ้นสุดอยู่หรือจะไม่พร้อมใช้ ตัวอย่าง: ยูริที่ใช้ใน HTML doctypes http://www.w3.org/TR/html4/strict.dtd
เช่น URI นั้นจะยังคงชื่อประเภทการเปลี่ยนผ่าน HTML4 ต่อไปแม้ว่าหน้าในเว็บไซต์ w3.org จะถูกลบ
file://
คำนำหน้าไว้ แม้ว่าเบราว์เซอร์จะจัดการเส้นทางไฟล์ในรูปแบบที่ไม่ใช่ URL Mozilla เผยแพร่กรณีทดสอบของพวกเขาสำหรับ URL
mailto:user@example.com
ว่าเป็น URL แต่มีคำตอบอีกคำตอบด้านล่างว่าเป็น URL หรือไม่ อะไรถูก เป็นทั้ง URN และ URL ใช่ไหม
โดยสรุป: URI จะระบุ URL จะระบุและระบุตำแหน่ง
พิจารณาบทละครของเชคสเปียร์รุ่นRomeo and Julietที่คุณมีสำเนาดิจิทัลในเครือข่ายภายในบ้านของคุณ
urn:isbn:0-486-27557-4
คุณสามารถระบุข้อความเป็น
ที่จะเป็น URI แต่เฉพาะมากขึ้นผอบ * เพราะมันชื่อข้อความ
file://hostname/sharename/RomeoAndJuliet.pdf
นอกจากนี้คุณยังสามารถระบุข้อความเป็น
ว่ายังจะเป็น URI แต่เฉพาะมากขึ้นURLเพราะมันตั้งข้อความ
* ชื่อทรัพยากรชุด
(โปรดทราบว่าตัวอย่างของฉันดัดแปลงมาจากWikipedia )
ISBN 0486275574
ยังตั้งชื่อข้อความและทำให้มีคุณสมบัติเป็น URN ฉันเลือกรูปแบบที่ฉันเชื่อว่าจะคุ้นเคยกับผู้อ่านมากขึ้น
เหล่านี้เป็นคำตอบที่เขียนได้ดีมาก แต่ใช้เวลานาน นี่คือความแตกต่างที่เกี่ยวข้องกับ CodeIgniter :
URL - http://example.com/some/page.html
URI - /some/page.html
กล่าวง่ายๆคือ URL เป็นวิธีที่สมบูรณ์ในการระบุแหล่งที่มาที่ใดก็ได้และสามารถมีโปรโตคอลที่แตกต่างกันเช่น FTP, HTTP, SCP และอื่น ๆ
URI เป็นทรัพยากรในโดเมนปัจจุบันดังนั้นจึงต้องการข้อมูลน้อยลง
ในทุก ๆ กรณีที่ CodeIgniter ใช้คำว่า URL หรือ URI นี่คือความแตกต่างที่พวกเขากำลังพูดถึงแม้ว่าในรูปแบบที่ยิ่งใหญ่ของเว็บมันไม่ถูกต้อง 100%
/some/page.html
ไม่ใช่ URI มันเป็น "ญาติอ้างอิง" ซึ่งเป็นชนิดของ "อ้างอิง URI" เมื่อรวมกับบริบท URI พื้นฐานสามารถแก้ไขเป็น URI ได้ แต่ไม่ใช่ URI ดูมาตรา 4.1 ของ RFC 3986 CodeIgniter อาจใช้คำศัพท์ผิดและควรถูกเรียกออกมา Q (ดังที่แก้ไขในขณะนี้) ไม่ได้ถูกวางกรอบเป็น CodeIgniter เฉพาะ
ก่อนอื่นทำให้จิตใจของคุณสับสนและทำให้ง่ายและคุณจะเข้าใจ
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 เท่านั้น
นอกจากคำตอบเล็ก ๆ ที่โพสต์ไว้แล้วนี่คือแผนภาพของ Venn เพื่อสรุปทฤษฎี (จากคำอธิบายที่สวยงามของ Prateek Joshi ):
และตัวอย่าง (จากเว็บไซต์ของ Prateek):
#posts
ตัวระบุส่วนสามารถเป็นส่วนหนึ่งของ URL
นี่เป็นหนึ่งในหัวข้อที่สับสนและไม่เกี่ยวข้องมากที่สุดที่ฉันพบในฐานะผู้เชี่ยวชาญทางเว็บ
ตามที่ฉันเข้าใจแล้ว URI เป็นคำอธิบายของสิ่งต่าง ๆ ตามรูปแบบที่ยอมรับซึ่งสามารถกำหนดชื่อเฉพาะ (การระบุ) ของบางสิ่งบางอย่างและตำแหน่งที่ตั้งได้
มีชุดย่อยพื้นฐานสองชุด - URL ซึ่งกำหนดตำแหน่ง (โดยเฉพาะกับเบราว์เซอร์ที่พยายามค้นหาหน้าเว็บ) และ URN ซึ่งกำหนดชื่อเฉพาะของบางสิ่ง
ฉันมักจะคิดว่า URNs คล้ายกับ GUID พวกเขาเป็นเพียงวิธีการมาตรฐานสำหรับการให้ชื่อเฉพาะสำหรับสิ่งต่าง ๆ เช่นเดียวกับการประกาศเนมสเปซที่ใช้ชื่อ บริษัท - มันไม่เหมือนกับว่ามีทรัพยากรอยู่บนเซิร์ฟเวอร์บางแห่งเพื่อให้สอดคล้องกับบรรทัดข้อความนั้น - มันระบุสิ่งที่ไม่ซ้ำกัน
ฉันยังมีแนวโน้มที่จะหลีกเลี่ยงคำว่า URI อย่างสมบูรณ์และอภิปรายสิ่งต่าง ๆ ในรูปของ URL หรือ URN ตามความเหมาะสมเท่านั้นเพราะมันทำให้เกิดความสับสนมาก คำถามที่เราควรลองตอบสำหรับคนไม่ใช่ความหมายมากนัก แต่จะต้องระบุได้อย่างไรเมื่อพบกับคำศัพท์ว่าพวกเขามีความแตกต่างในทางปฏิบัติหรือไม่ซึ่งจะเปลี่ยนวิธีการให้เข้ากับสถานการณ์การเขียนโปรแกรม ตัวอย่างเช่นหากมีคนแก้ไขฉันในการสนทนาและพูดว่า "โอ้นั่นไม่ใช่ URL มันคือ URI" ฉันรู้ว่าพวกเขาเต็มไปด้วยมัน หากมีคนพูดว่า "เรากำลังใช้ URN เพื่อกำหนดทรัพยากร" ฉันมีแนวโน้มที่จะเข้าใจว่าเราตั้งชื่อเฉพาะเท่านั้นไม่ได้ค้นหาในเซิร์ฟเวอร์
ถ้าฉันออกจากฐาน - โปรดแจ้งให้เราทราบ!
เอกลักษณ์ = ชื่อที่มีที่ตั้ง
ทุก 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:[namespace identifier]:[namespace specific string]
arn:partition:service:region:account-id:resource
URL:
[scheme]://[Domain][Port]/[path]?[queryString]#[fragmentId]
การเปรียบเทียบ:
ในการเข้าถึงบุคคล: การขับรถ (โปรโตคอลอื่น SMS, อีเมล, โทรศัพท์), ที่อยู่ (ชื่อโฮสต์หมายเลขโทรศัพท์อื่น ๆ , อีเมล) และชื่อบุคคล (ชื่อวัตถุที่มีเส้นทางสัมพัทธ์)
URI => http://en.wikipedia.org/wiki/Uniform_Resource_Identifier
URL คือชุดย่อยของ URI (ซึ่งมี URN ด้วย)
โดยทั่วไปแล้ว URI เป็นตัวระบุทั่วไปโดยที่ URL จะระบุตำแหน่งที่ตั้งและ URN จะระบุชื่อ
[
และ]
แต่ไม่ URI
อีกตัวอย่างที่ฉันต้องการใช้เมื่อคิดถึง URIs คือแอตทริบิวต์ xmlns ของเอกสาร XML:
<rootElement xmlns:myPrefix="com.mycompany.mynode">
<myPrefix:aNode>some text</myPrefix:aNode>
</rootElement>
ในกรณีนี้ com.mycompany.mynode จะเป็น URI ที่ระบุเนมสเปซ "myPrefix" สำหรับองค์ประกอบทั้งหมดที่ใช้ภายในเอกสาร XML ของฉัน นี่ไม่ใช่ URL เพราะใช้เพื่อระบุเท่านั้นไม่ใช่เพื่อค้นหาบางอย่าง
เนื่องจากปัญหาในการแยกความแตกต่างระหว่าง URI และ URL อย่างชัดเจนเท่าที่ฉันจำได้ว่า W3C ไม่ได้สร้างความแตกต่างระหว่าง URI และ URL อีกต่อไป ( http://www.w3.org/Addressing/ )
พวกเขากำลังสิ่งเดียวกัน URI เป็นลักษณะทั่วไปของ URL ในขั้นต้น URIs ได้รับการวางแผนให้แบ่งออกเป็น URL (ที่อยู่) และ URNs (ชื่อ) แต่ก็มีความแตกต่างกันเล็กน้อยระหว่าง URL และ URI และ http URIs ถูกใช้เป็นเนมสเปซแม้ว่าพวกเขาจะไม่ได้ค้นหาทรัพยากรใด ๆ ก็ตาม
URI, URL, URN
ตามภาพด้านบนแสดงว่ามีองค์ประกอบที่แตกต่างกันสามอย่างในการเล่นที่นี่ โดยปกติแล้วจะเป็นการดีที่สุดที่จะไปที่แหล่งที่มาเมื่อพูดถึงเรื่องเหล่านี้ดังนั้นนี่เป็นส่วนหนึ่งของ Tim Berners-Lee และ อัล ใน RFC 3986: Uniform Resource Identifier (URI): ไวยากรณ์ทั่วไป:
Uniform Resource Identifier (URI) เป็นลำดับตัวอักษรขนาดกะทัดรัดที่ระบุทรัพยากรนามธรรมหรือกายภาพ
URI สามารถจัดประเภทเพิ่มเติมเป็นตัวระบุตำแหน่งชื่อหรือทั้งสองอย่าง คำว่า“ Uniform Resource Locator” (URL) หมายถึงชุดย่อยของ URIs ซึ่งนอกเหนือจากการระบุทรัพยากรแล้วยังให้วิธีการในการค้นหาทรัพยากรโดยการอธิบายกลไกการเข้าถึงหลัก (เช่นที่ตั้งเครือข่ายของมัน)
URI เป็นประเภทซุปเปอร์คลาสของ URL และ URN Wikipedia มีบทความที่ดีเกี่ยวกับพวกเขาพร้อมลิงก์ไปยังชุด RFC ที่เหมาะสม
Wikipedia จะให้ข้อมูลทั้งหมดที่คุณต้องการที่นี่ อ้างจากhttp://en.wikipedia.org/wiki/URI :
URL คือ URI ที่นอกเหนือจากการระบุทรัพยากรแล้วยังมีวิธีดำเนินการหรือรับการเป็นตัวแทนของทรัพยากรโดยอธิบายกลไกการเข้าถึงหลักหรือ "ตำแหน่ง" ของเครือข่าย
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 เป็นคำที่ถูกต้อง
ตามRFC 3986 , URIs ประกอบด้วยชิ้นส่วนต่อไปนี้:
scheme://authority/path?query
URI ที่อธิบายโปรโตคอลสำหรับการเข้าถึงทรัพยากร ( เส้นทาง ) หรือโปรแกรมประยุกต์ ( แบบสอบถาม ) บนเซิร์ฟเวอร์ ( อำนาจ )
URL ทั้งหมดเป็น URIs และ URN ทั้งหมดเป็น URIs แต่ URI ทั้งหมดไม่ใช่ URL
โปรดอ้างอิงรายละเอียดเพิ่มเติม:
URI จะระบุทรัพยากรทั้งตามที่ตั้งหรือชื่อหรือทั้งสองอย่าง บ่อยกว่านั้นเราส่วนใหญ่ใช้ URIs ที่กำหนดที่ตั้งให้กับทรัพยากร ข้อเท็จจริงที่ว่า URI สามารถระบุทรัพยากรด้วยชื่อและตำแหน่งที่ตั้งทำให้เกิดความสับสนในความคิดของฉัน URI มีสองความเชี่ยวชาญเป็นที่รู้จักกันในชื่อ URL และ URN
URL คือความเชี่ยวชาญของ URI ที่กำหนดตำแหน่งเครือข่ายของทรัพยากรที่เฉพาะเจาะจง ไม่เหมือนกับ URN URL จะกำหนดวิธีการรับทรัพยากร เราใช้ URL ทุกวันในรูปแบบของhttp://stackoverflow.comเป็นต้น แต่ URL ไม่จำเป็นต้องเป็น URL HTTP ก็สามารถเป็นได้ftp://example.com
ฯลฯ
แม้ว่าคำว่า 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
นี่อาจเป็นสาเหตุของความสับสน
ดูเอกสารนี้ โดยเฉพาะอย่างยิ่ง
URL คือประเภทของ URI ที่ระบุทรัพยากรผ่านการเป็นตัวแทนของกลไกการเข้าถึงหลัก (เช่น "ตำแหน่ง" เครือข่าย) แทนที่จะเป็นคุณลักษณะอื่น ๆ ที่อาจมี
มันไม่ได้เป็นคำที่ชัดเจนมากจริงๆ
หลังจากอ่านผ่านโพสต์ฉันพบความคิดเห็นที่เกี่ยวข้องมาก กล่าวโดยย่อความสับสนระหว่างคำจำกัดความ 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
นี่คือความเรียบง่ายของฉัน:
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 เวลาอยู่แล้ว .. .)
ผมสงสัยเกี่ยวกับสิ่งเดียวกันและฉันได้พบนี้: 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
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 ทำหน้าที่แยกแยะข้อความนั้นจากข้อความอีเมลอื่น แต่มันไม่ได้ให้ที่อยู่ของข้อความในร้านค้าใด ๆ
เพื่อที่จะตอบคำถามนี้ฉันจะพึ่งพาคำตอบผมแก้ไขเพื่อคำถามอื่น ตัวอย่างที่ดีของ 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
ง่ายต่อการอธิบาย:
ให้ถือว่าสิ่งต่อไปนี้
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 ย่อย แต่ไม่ใช่ในทางกลับกัน
Uniform Resource Identifier (URI) คือสตริงของอักขระที่ระบุอินเทอร์เน็ตอินเทอร์เน็ต
URI ที่พบบ่อยที่สุดคือ Uniform Resource Locator (URL) ซึ่งระบุที่อยู่โดเมนอินเทอร์เน็ต ประเภทอื่นที่ไม่ใช่ URI ทั่วไปคือ Universal Resource Name (URN)
ฉันพบ:
Uniform Resource Identifier (URI) แสดงถึงภาพรวมขนาดใหญ่ คุณสามารถแบ่ง URIs / URIs สามารถจัดประเภทเป็นตัวระบุตำแหน่ง (ทรัพยากรตัวระบุตำแหน่ง - URL) หรือเป็นชื่อ (ชื่อทรัพยากรรูปแบบเดียวกัน -URN) หรือทั้งสองอย่าง โดยทั่วไปแล้วฟังก์ชัน URN เช่นชื่อของบุคคลและ URL แสดงที่อยู่ของบุคคลนั้น เรื่องสั้นที่สั้นมาก URN จะกำหนดตัวตนของไอเท็มในขณะที่ URL ที่ให้ไว้จะกำหนดวิธีการค้นหาในที่สุดแนวคิดที่ห่อหุ้มสองแนวคิดนี้คือ URI
IMOสรุปทางเทคนิคที่ดีที่สุดคืออันนี้
IRI, URI, URL, URN และความแตกต่างจาก Jan Martin Keil:
จัดการทุกคนที่มีความหมายเว็บซ้ำ ๆ มาเจอเงื่อนไขIRI , URI , URLและผอบ อย่างไรก็ตามฉันมักสังเกตว่ามีความสับสนบางอย่างเกี่ยวกับความหมายที่แท้จริงของพวกเขา และแน่นอนว่าคนอื่นก็สังเกตเห็นเช่นกัน (ดูเช่น RFC3305 หรือค้นหาใน Google) พูดตามตรงฉันก็สับสนในตอนแรก แต่จริงๆแล้วปัญหาไม่ซับซ้อน ลองมาดูคำจำกัดความของคำที่กล่าวถึงเพื่อดูความแตกต่าง:
ทรัพยากรตัวบ่งชี้เครื่องแบบเป็นลำดับที่มีขนาดกะทัดรัดของตัวอักษรที่ระบุเป็นทรัพยากรที่เป็นนามธรรมหรือทางกายภาพ ชุดของอักขระถูก จำกัด ไว้ที่ 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]
Uniform Resource Locatorเป็น URI ที่นอกเหนือไปจากการระบุทรัพยากรให้หมายถึงตำแหน่งของทรัพยากรโดยการอธิบายกลไกการเข้าถึงหลัก [RFC3986] เนื่องจากไม่มีคำจำกัดความที่แน่นอนของ URL โดยใช้ชุดของแบบแผน "URL เป็นแนวคิดที่มีประโยชน์ แต่ไม่เป็นทางการ" ซึ่งมักจะอ้างถึงชุดย่อยของ URIs ที่ไม่มี URNs [RFC3305]
ตัวระบุทรัพยากรที่เป็นสากลถูกกำหนดคล้ายกับ 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 = ∅)
RDF อนุญาตให้ใช้ IRIs อย่างชัดเจนเพื่อตั้งชื่อเอนทิตี [RFC3987] ซึ่งหมายความว่าเราสามารถใช้อักขระเกือบทุกตัวในชื่อเอนทิตี ในทางกลับกันเรามักจะต้องจัดการกับซอฟต์แวร์สถานะต้น ดังนั้นจึงไม่น่าจะพบปัญหาในการใช้อักขระที่ไม่ใช่ ASCII ดังนั้นฉันขอแนะนำให้หลีกเลี่ยงชื่อที่ไม่ใช่ URI สำหรับเอนทิตีและแนะนำให้ใช้ http URIs [LINKED-DATA] หากต้องการกล่าวสั้น ๆ : ใช้ URL เพื่อตั้งชื่อเอนทิตีของคุณ แน่นอนเราสามารถอ้างถึงเอนทิตีที่มีอยู่ที่มีชื่อโดย URN อย่างไรก็ตามเราควรหลีกเลี่ยงการสร้างตัวระบุประเภทนี้ใหม่