การเปิดเผย URI, URL และ URN
คู่มือนี้ให้ภาพรวมของ URI, URL และ URN อธิบายความแตกต่างและกรณีการใช้งานของพวกเขา
เมื่อพัฒนาเว็บแอป เรามักจะต้องเรียกใช้บริการเว็บต่างๆ เมื่อกำหนดค่าให้การสื่อสารและเชื่อมต่อบริการเว็บต่างๆ เรามักจะพบกับแนวคิดเกี่ยวกับ URI, URL และ URN โดยปกติแล้ว ผู้ใช้จะพบว่าการแยกแยะพวกเขายาก ซึ่งนำไปสู่การใช้แบบผสมหรือไม่ถูกต้อง ในบทความนี้ เราจะให้ตัวอย่างและอธิบายความแตกต่างระหว่างพวกเขาเพื่อช่วยให้ทุกคนเข้าใจแนวคิดเหล่านี้ได้ดียิ่งขึ้นและสามารถแปลความหมายและใช้พวกเขาได้อย่างถูกต้องเมื่ออ่านบล็อกทางเทคนิค เอกสาร หรือสื่อสารกับวิศวกรคนอื่นๆ
URL คืออะไร?
URL (Uniform Resource Locator) ให้ที่อยู่เว็บหรือที่ตั้งของทรัพยากรบนอินเทอร์เน็ต ใช้เพื่อระบุที่ตั้งของหน้าเว็บ ไฟล์ หรือบริการ URL ให้รูปแบบที่ได้มาตรฐานในการเข้าถึงทรัพยากรบนเว็บ เป็นส่วนสำคัญของการท่องเว็บ การเชื่อมโยง และการสื่อสารผ่านอินเทอร์เน็ต
URL ประกอบด้วยหลายส่วนที่รวมกันกำหนดที่อยู่ของทรัพยากรและโปรโตคอลที่ใช้ในการเข้าถึงมัน มาวิเคราะห์ URL ด้านล่างเป็นตัวอย่างและอธิบายหน้าที่ของแต่ละส่วนทีละส่วน
-
Scheme: ระบุโปรโตคอลหรือสคีมที่ใช้ในการเข้าถึงทรัพยากร เช่น HTTP (Hypertext Transfer Protocol), HTTPS (HTTP Secure), FTP (File Transfer Protocol), หรือ อื่นๆ
สคีมใน URL คือ
https
-
Host: โฮสต์ระบุชื่อโดเมนหรือที่อยู่ IP ของเซิร์ฟเวอร์ที่โฮสต์ทรัพยากร
โฮสต์ใน URL คือ
example.logto.io
-
Port: (ไม่จำเป็น) พอร์ตแสดงถึงหมายเลขพอร์ตเฉพาะบนโฮสต์ที่เข้าถึงทรัพยากร หากไม่ระบุพอร์ต จะถูกตั้งค่าเริ่มต้นเป็นพอร์ตมาตรฐานสำหรับสคีมนั้น
พอร์ตมาตรฐานสำหรับ HTTP คือ 80 ในขณะที่พอร์ตมาตรฐานสำหรับ HTTPS คือ 443
พอร์ตใน URL คือ
8080
-
Path: (ไม่จำเป็น) พาธแสดงที่ตั้งหรือไดเรกทอรีเฉพาะบนเซิร์ฟเวอร์ที่ทรัพยากรตั้งอยู่ ซึ่งอาจรวมถึงไดเรกทอรีและชื่อไฟล์
พาธใน URL ควรเป็น
/blogs/index.html
-
Query Parameters: (ไม่จำเป็น) ค่าพารามิเตอร์เสริมที่ส่งไปยังทรัพยากร มักใช้ในเว็บแอปพลิเคชันแบบไดนามิก ปรากฏหลังพาธและคั่นด้วยสัญลักษณ์
?
ค่าพารามิเตอร์ใน URL คือ
params1=value1¶m2=value2
ซ ึ่งมักแสดงในรูปแบบคู่ของคีย์และค่า โดยคีย์-ค่าแต่ละคู่คั่นด้วยสัญลักษณ์&
ในสถานการณ์การใช้งานจริง มักจะต้องเข้ารหัสเพื่อหลีกเลี่ยงอักขระเช่นช่องว่าง -
Fragment Identifier: (ไม่จำเป็น) เรียกว่าจุดยึด ใช้ระบุตำแหน่งเฉพาะในทรัพยากร
จุดยึดใน URL คือ
#introduction
นอกจากนี้ เช่น การใช้บริการไฟล์หรือปุ่ม "ติดต่อเรา" บนหน้าเว็บต่างๆ มักจะเชื่อมโยงกับ URLs เช่น:
ftp://documents.logto.io/files/legal/soc_ii.pdf
mailto:[email protected]?subject=Enterprise%20quota%20request
URI คืออะไร?
URI หมายถึง "Uniform Resource Identifier" เป็นสตริงของอักขระที่ระบุตัวทรัพยากรเฉพาะ เช่น หน้าเว็บ ไฟล์ หรือบริการ URI ให้วิธีการระบุตัวและจัดหาทรัพยากรได้อย่างเฉพาะเจาะจงโดยใช้รูปแบบมาตรฐาน
URI ประกอบด้วยสองส่วนหลัก:
- Scheme: ระบุโปรโตคอลหรือสคีมที่ใช้ในการเข้าถึงทรัพยากร
- Resource Identifier: ระบุตัวทรัพยากรเฉพาะที่ถูกเข้าถึงหรืออ้างอิง รูปแบบของตัวระบุทรัพยากรขึ้นอยู่กับสคีมที่ใช้
จากมุมมองทางไวยากรณ์ URI ส่วนใหญ่ตามรูปแบบเดียวกับ URLs ตามที่ระบุใน RFC 3986
แม้ว่า URI จะมีรูปแบบคล้ายกับ URLs แต่ก็ไม่ได้การันตีการเข้าถึงทรัพยากรใดๆ บนเว็บ การใช้รูปแบบนี้สามารถลดการขัดแย้งของชื่อเนมสเปซได้
ในหัวข้อด้านบนเราได้แนะนำ URLs ซึ่งไม่เพียงแค่ระบุตัวทรัพยากรแต่ยังช่วยระบุตำแหน่งของทรัพยากรนั้นด้วย ดังนั้นจริงๆแล้ว URLs คือส่วนย่อยที่ถูกต้องของ URIs
URN คืออะไร?
URN อาจจะไม่ค่อยเป็นที่รู้จักเหมือน URL และ URI มันย่อมาจาก "Uniform Resource Name" และขอบเขตคือการระบุตัวทรัพยากรในลักษณะที่คงอยู่ แม้ว่าทรัพยากรเหล่านั้นอาจจะไม่มีอยู่แล้วก็ตาม
ต่างจาก URL, URN ไม่ได้ให้ข้อมูลใดๆเกี่ยวกับวิธีการค้นหาทรัพยากร มันเพียงแค่ระบุตัวมันเท่านั้น เช่นเดียวกับ URI ที่บริสุทธิ์ โดยเฉพาะ URN เป็นชนิดของ URI ที่มีสคีม "urn" และมีโครงสร้างดังนี้ ตามที่อธิบายไว้ใน RFC 2141:
<URN>:<NID>:<NSS>
- URN: มักจะเป็น
urn
- Namespace Identifier (NID): แสดงถึงเนมสเปซที่ไม่ซ้ำกันหรือระบบระบุตัวที่กำหนดและจัดการ URN มันให้บริบทและรับรองความไม่ซ้ำของระบุตัวอย่าง ตัวอย่างเนมเพสเช่น ISBN (International Standard Book Number) เป็นต้น
- Namespace Specific String (NSS): เป็นสตริงของอักขระที่ระบุตัวทรัพยากรอย่างเฉพาะเจาะจงภายในเนมสเปซที่ระบุ ตัวบ่งชี้เองไม่ได้สื่อสารข้อมูลใดๆเกี่ยวกับที่ตั้งหรือวิธีการเข้าถึงทรัพยากร
ตัวอย่างเช่น หนังสือที่มีชื่อเสียงที่แนะนำระบบคอมพิวเตอร์ CSAPP มีหมายเลข ISBN ที่แสดงเป็น URN urn:isbn:9780134092669
URNs ถูกใช้บ่อยในโปรโตคอลมาตรฐานต่างๆ เช่น การยืนยันในโปรโตคอล SAML ที่ซึ่งเชื่อมต่อกับ URN urn:oasis:names:tc:SAML:2.0:assertion
ในวิศวกรรมซอฟต์แวร์ เราก็สามารถกำหนด URNs สำหรับวัตถุประสงค์เฉพาะในระบบของเราเองตามกฎการตั้งชื่อ URN ได้เช่นกัน ตัวอย่างเช่นใน Logto เพื่อเปิดใช้งานองค์กร คุณต้องเพิ่มสโคป urn:logto:scope:organizations
ในการกำหนดค่าเมื่อใช้ SDK องค์กรแต่ละหน่วยก็มี URN เฉพาะของตัวเอง urn:logto:organization:{orgId}
บทสรุป
ความสัมพันธ์ระหว่าง URI, URL และ URN สามารถอธิบายได้โดยใช้แผนภาพเวนน์ดังนี้:
URI, URL และ URN สามารถใช้ระบุตัวทรัพยากรที่แตกต่างกันได้ทั้งหมด แต่เพียง URL สามารถระบุตำแหน่งของทรัพยากรอย่างแม่นยำ
URI และ URL สามารถสนับสนุนสคีมต่างๆ เช่น HTTP, HTTPS, FTP แต่ URN สามารถถือว่าสนับสนุนสคีม urn
เท่านั้น
URLs หรือ URNs ทั้งหมดเป็น URIs แต่ไม่ใช่ URIs ทุกประเภทที่เป็น URLs หรือ URNs