• uri
  • url
  • urn

การเปิดเผย URI, URL และ URN

คู่มือนี้ให้ภาพรวมของ URI, URL และ URN อธิบายความแตกต่างและกรณีการใช้งานของพวกเขา

Darcy Ye
Darcy Ye
Developer

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

URL คืออะไร?

URL (Uniform Resource Locator) ให้ที่อยู่เว็บหรือที่ตั้งของทรัพยากรบนอินเทอร์เน็ต ใช้เพื่อระบุที่ตั้งของหน้าเว็บ ไฟล์ หรือบริการ URL ให้รูปแบบที่ได้มาตรฐานในการเข้าถึงทรัพยากรบนเว็บ เป็นส่วนสำคัญของการท่องเว็บ การเชื่อมโยง และการสื่อสารผ่านอินเทอร์เน็ต

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

  1. Scheme: ระบุโปรโตคอลหรือสคีมที่ใช้ในการเข้าถึงทรัพยากร เช่น HTTP (Hypertext Transfer Protocol), HTTPS (HTTP Secure), FTP (File Transfer Protocol), หรือ อื่นๆ

    สคีมใน URL คือ https

  2. Host: โฮสต์ระบุชื่อโดเมนหรือที่อยู่ IP ของเซิร์ฟเวอร์ที่โฮสต์ทรัพยากร

    โฮสต์ใน URL คือ example.logto.io

  3. Port: (ไม่จำเป็น) พอร์ตแสดงถึงหมายเลขพอร์ตเฉพาะบนโฮสต์ที่เข้าถึงทรัพยากร หากไม่ระบุพอร์ต จะถูกตั้งค่าเริ่มต้นเป็นพอร์ตมาตรฐานสำหรับสคีมนั้น

    พอร์ตมาตรฐานสำหรับ HTTP คือ 80 ในขณะที่พอร์ตมาตรฐานสำหรับ HTTPS คือ 443

    พอร์ตใน URL คือ 8080

  4. Path: (ไม่จำเป็น) พาธแสดงที่ตั้งหรือไดเรกทอรีเฉพาะบนเซิร์ฟเวอร์ที่ทรัพยากรตั้งอยู่ ซึ่งอาจรวมถึงไดเรกทอรีและชื่อไฟล์

    พาธใน URL ควรเป็น /blogs/index.html

  5. Query Parameters: (ไม่จำเป็น) ค่าพารามิเตอร์เสริมที่ส่งไปยังทรัพยากร มักใช้ในเว็บแอปพลิเคชันแบบไดนามิก ปรากฏหลังพาธและคั่นด้วยสัญลักษณ์ ?

    ค่าพารามิเตอร์ใน URL คือ params1=value1&param2=value2 ซึ่งมักแสดงในรูปแบบคู่ของคีย์และค่า โดยคีย์-ค่าแต่ละคู่คั่นด้วยสัญลักษณ์ & ในสถานการณ์การใช้งานจริง มักจะต้องเข้ารหัสเพื่อหลีกเลี่ยงอักขระเช่นช่องว่าง

  6. 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 ประกอบด้วยสองส่วนหลัก:

  1. Scheme: ระบุโปรโตคอลหรือสคีมที่ใช้ในการเข้าถึงทรัพยากร
  2. 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>

  1. URN: มักจะเป็น urn
  2. Namespace Identifier (NID): แสดงถึงเนมสเปซที่ไม่ซ้ำกันหรือระบบระบุตัวที่กำหนดและจัดการ URN มันให้บริบทและรับรองความไม่ซ้ำของระบุตัวอย่าง ตัวอย่างเนมเพสเช่น ISBN (International Standard Book Number) เป็นต้น
  3. 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 สามารถอธิบายได้โดยใช้แผนภาพเวนน์ดังนี้:

Relations

URI, URL และ URN สามารถใช้ระบุตัวทรัพยากรที่แตกต่างกันได้ทั้งหมด แต่เพียง URL สามารถระบุตำแหน่งของทรัพยากรอย่างแม่นยำ

URI และ URL สามารถสนับสนุนสคีมต่างๆ เช่น HTTP, HTTPS, FTP แต่ URN สามารถถือว่าสนับสนุนสคีม urn เท่านั้น

URLs หรือ URNs ทั้งหมดเป็น URIs แต่ไม่ใช่ URIs ทุกประเภทที่เป็น URLs หรือ URNs