# ยูอาร์แอล

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

## ประวัติ

ตัวชี้แหล่งในอินเทอร์เน็ตสร้างขึ้นเมื่อ พ.ศ. 2533 (ค.ศ. 1990) โดยทิม เบอร์เนิร์ส-ลี โดยเป็นส่วนหนึ่งของตัวระบุแหล่งทรัพยากรสากล ซึ่งเขาก็ไม่พอใจกับรูปแบบของยูอาร์แอลเท่าใดนัก เพราะว่าแทนที่เขาจะแบ่งเส้นทางจากใหญ่ไปหาเล็ก แต่เขาแยกเซิร์ฟเวอร์ที่แบ่งด้วยจุด กับเส้นทางของไฟล์ที่แบ่งด้วยทับออกจากกัน ตัวอย่างเช่น ยูอาร์แอลนี้  เขาคิดไว้ว่ามันควรจะเป็นแบบนี้

## วากยสัมพันธ์

ยูอาร์แอลทุกชื่อประกอบขึ้นจาก แผนของตัวระบุแหล่งทรัพยากรสากล (URI scheme) (โดยทั่วไปเรียกว่าโพรโทคอล), ตามด้วยทวิภาค (:) และอื่น ๆ ขึ้นอยู่กับแผนที่ใช้งาน, ชื่อแม่ข่าย (hostname) หรือที่อยู่ไอพี, หมายเลขพอร์ต, ชื่อเส้นทางไปยังไฟล์ที่จะดึงข้อมูลมาหรือโปรแกรมที่จะทำงาน, และสุดท้ายคือสายอักขระสอบถาม (query string) โดยเฉพาะเมื่อทำงานกับโปรแกรมต่อประสานร่วมสำหรับเกตเวย์ (CGI) สำหรับการเรียกไฟล์เอชทีเอ็มแอล สามารถใส่จุดตรึง (anchor) เป็นทางเลือก เพื่อเลื่อนเว็บเพจไปยังจุดที่ต้องการได้ด้วย ดังนั้นรูปแบบโดยทั่วไปของยูอาร์แอลก็คือ

```
resource\_type://domain:port/filepathname?query\_string#anchor
```

* แผนของตัวระบุ หรือชนิดของทรัพยากร ได้นิยามเนมสเปซ จุดประสงค์ และวากยสัมพันธ์ของส่วนอื่นที่เหลือของยูอาร์แอลไว้แล้ว โปรแกรมที่ทำงานบนเว็บจะพยายามถอดความหมายยูอาร์แอลตามแผนและบริบทของมัน ตัวอย่างเช่น เว็บเบราว์เซอร์จะถอดความหมายของยูอาร์แอล  ว่าให้ส่งการร้องของไปบนเอชทีทีพี ไปยังเครื่องแม่ข่ายที่ชื่อว่า example.org ที่พอร์ตหมายเลข 80 หรือสำหรับชื่อทรัพยากรสากล (URN) เช่น mailto:bob@example.com จะเป็นการเริ่มต้นโปรแกรมเขียนอีเมล แล้วนำชื่อ bob@example.com ไปใส่ในฟีลด์ชื่อผู้รับ เป็นต้น สำหรับแผนของตัวระบุอื่น ๆ ก็มีอย่างเช่น https:, gopher:, wais:, ftp: ฯลฯ
* ชื่อโดเมนที่จดทะเบียนหรือที่อยู่ไอพีเป็นที่อยู่เป้าหมายสำหรับยูอาร์แอล เช่นชื่อโดเมน google.com หรือไอพี 72.14.207.99 ก็เป็นที่อยู่ของเว็บไซต์กูเกิล เป็นต้น
* ชื่อแม่ข่ายหรือชื่อโดเมนที่เป็นส่วนหนึ่งของยูอาร์แอลนั้น อักษรตัวเล็กตัวใหญ่ไม่มีความสำคัญ เพราะว่าระบบการตั้งชื่อโดเมน (DNS) ได้กำหนดไว้เช่นนั้น ดังนั้น  กับ HTTP://EN.WIKIPEDIA.ORG/ ทั้งคู่เปิดไปยังหน้าเดียวกัน
* หมายเลขพอร์ตเป็นส่วนประกอบที่ไม่จำเป็นต้องใส่ ซึ่งถ้าหากไม่ใส่ก็จะใช้หมายเลขพอร์ตปริยายของแผนนั้น ตัวอย่างเช่น หากพิมพ์ยูอาร์แอลนี้  ลงไปในช่องที่อยู่ เว็บเบราว์เซอร์จะเชื่อมต่อไปยังหมายเลขพอร์ต 5800 ของเครื่องแม่ข่าย myvncserver.no-ip.org ซึ่งพอร์ตนี้ถูกใช้โดยโปรแกรมควบคุมระยะไกลของ Virtual Network Computing ถ้าไม่ใส่ จะเชื่อมต่อไปยังพอร์ตหมายเลข 80 ซึ่งเป็นพอร์ตปริยายของเอชทีทีพี เครื่องแม่ข่ายหนึ่งอาจสามารถเชื่อมต่อได้หลายพอร์ตและต่างบริการก็ได้
* ชื่อเส้นทางของไฟล์ คือที่อยู่ในเครื่องแม่ข่ายซึ่งไฟล์หรือโปรแกรมนั้นบันทึกอยู่ ส่วนนี้อักษรตัวเล็กตัวใหญ่มีความสำคัญตามหลักการ แต่ก็อาจไม่มีความสำคัญในเครื่องให้บริการบางเครื่องก็ได้ โดยเฉพาะเว็บเซิร์ฟเวอร์ที่ทำงานอยู่บนไมโครซอฟท์ วินโดวส์ เช่นว่า สำหรับบนเครื่องแม่ข่ายที่อักษรตัวเล็กตัวใหญ่มีความสำคัญ การเรียกทรัพยากรไปยังยูอาร์แอล  ให้ผลที่ถูกต้อง แต่ถ้าเรียกไปยัง  หรือ  จะคืนค่าเป็นหน้าข้อความผิดพลาดรหัส 404 แต่สำหรับเว็บเซิร์ฟเวอร์บนวินโดวส์ ยูอาร์แอลทั้งสามจะเปิดไปยังหน้าเดียวกัน
* สายอักขระสอบถามเป็นข้อมูลที่ส่งผ่านไปยังเว็บแอปพลิเคชัน เช่นโปรแกรมซีจีไอ สายอักขระสอบถามจะถูกแบ่งไว้เป็นชื่อตัวแปร เครื่องหมายเท่ากับ (=) และค่าของมันเป็นคู่ ๆ คั่นด้วยแอมเพอร์แซนด์ (&) เช่น first\_name=John&last\_name=Doe การส่งสายอักขระสอบถามไปกับทรัพยากรธรรมดาอาจไม่มีประโยชน์อะไร
* จุดตรึงในยูอาร์แอล ใช้กับเอชทีทีพีสำหรับระบุตำแหน่งบนหน้าเว็บ เช่นยูอาร์แอลนี้  จะเป็นการระบุถึงส่วนที่ชื่อว่า Syntax ในหน้าเว็บนั้น ในบางเว็บไซต์ ส่วนประกอบจุดตรึงอาจมีฟังก์ชันการทำงานอย่างอื่น ดูเพิ่มในตัวระบุชิ้นส่วน (fragment identifier)

## ยูอาร์แอลสัมบูรณ์และยูอาร์แอลสัมพัทธ์

ยูอาร์แอลสัมบูรณ์ (absolute URL) หรือยูอาร์แอลเต็ม คือการระบุทรัพยากรไฟล์ในตำแหน่งที่แน่นอน และมีเพียงหนึ่งเดียว หมายความว่าถ้ายูอาร์แอลสองชื่อเหมือนกัน จะโยงมาที่ไฟล์เดียวกันเสมอ ไม่ว่าจะเรียกจากที่ตำแหน่งใด ตัวอย่างเช่น

```

```

ในทางตรงข้าม ยูอาร์แอลสัมพัทธ์ (relative URL) หรือยูอาร์แอลย่อ คือการระบุแหล่งทรัพยากรไฟล์ที่ต้องการจากตำแหน่งอ้างอิงหรือตำแหน่งปัจจุบัน การใช้งานแบบนี้มักพบได้ในการอ้างถึงไฟล์อื่นที่อยู่ต่างไดเรกทอรี โดยจะใช้จุดสองจุด (..) เพื่ออ้างถึงไดเรกทอรีชั้นที่อยู่เหนือขึ้นไป

```
../directory\_path/file.txt
```

และใช้จุดเดียว (.) หรือไม่ใส่ทั้งจุดและเครื่องหมายทับ เพื่ออ้างถึงไดเรกทอรีปัจจุบัน

```
./directory\_path/file.txt
directory\_path/file.txt
```

ในกรณีเช่นนี้ ถึงแม้ยูอาร์แอลสองชื่อเหมือนกัน แต่ก็อาจไม่ได้โยงไปไฟล์เดียวกัน ถ้าหากเรียกทรัพยากรนี้จากต่างไดเรกทอรี

## ชื่อแม่ข่ายอินเทอร์เน็ต

ชื่อแม่ข่าย (hostname) คือชื่อโดเมนที่กำหนดให้ไว้กับคอมพิวเตอร์ที่รับฝากไฟล์บนอินเทอร์เน็ต (host) มักจะเป็นการรวมกันระหว่างชื่อคอมพิวเตอร์ภายในเครือข่ายกับชื่อโดเมนส่วนบน ตัวอย่างเช่น "en.wikipedia.org" ประกอบด้วยชื่อภายใน "en" และชื่อโดเมน "wikipedia.org" ชื่อแม่ข่ายประเภทนี้จะถูกแปลงไปเป็นที่อยู่ไอพีโดยไฟล์ hosts หรือโดยระบบการตั้งชื่อโดเมน (DNS) คอมพิวเตอร์หนึ่งเครื่องสามารถมีชื่อแม่ข่ายได้หลายชื่อ ปกติแล้วระบบปฏิบัติการในเครื่อง จะมีชื่อแม่ข่ายหนึ่งชื่อที่ใช้สำหรับการอ้างถึงเครื่องตัวเอง (localhost)

ชื่อโดเมนก็สามารถใช้เป็นชื่อแม่ข่ายได้เช่นกัน ในกรณีที่มีการกำหนดที่อยู่ไอพีให้กับชื่อโดเมนนั้น เช่น ทั้ง "en.wikimedia.org" และ "wikimedia.org" และ "rr.pmtpa.wikimedia.org" ต่างก็เป็นชื่อแม่ข่ายเพราะมีที่อยู่ไอพี แต่สำหรับชื่อโดเมน "pmtpa.wikimedia.org" ไม่เป็นชื่อแม่ข่ายเพราะไม่มีไอพีกำหนดเอาไว้ (แม้ว่า "rr.pmtpa" จะเป็นส่วนย่อยของ "pmtpa" ก็ตาม) ดังนั้นชื่อแม่ข่ายทุกชื่อจึงเป็นชื่อโดเมน แต่ชื่อโดเมนบางชื่อเท่านั้นที่เป็นชื่อแม่ข่าย (ชื่อแม่ข่ายเป็นเซตย่อยของชื่อโดเมน)

## เชิงอรรถ

## อ้างอิง

* "Berners-Lee "sorry" for slashes". BBC News. 14 October 2009. เก็บจากแหล่งเดิมเมื่อ 2020-06-05. สืบค้นเมื่อ 14 February 2010.
* "Living Documents BoF Minutes". World Wide Web Consortium. 18 March 1992. เก็บจากแหล่งเดิมเมื่อ 2012-11-22. สืบค้นเมื่อ 26 December 2011.
* Berners-Lee, Tim (21 March 1994). "Uniform Resource Locators (URL): A Syntax for the Expression of Access Information of Objects on the Network". World Wide Web Consortium. เก็บจากแหล่งเดิมเมื่อ 2015-09-09. สืบค้นเมื่อ 13 September 2015.
* Berners-Lee, Tim (2015) [2000]. "Why the //, #, etc?". *Frequently asked questions*. World Wide Web Consortium. เก็บจากแหล่งเดิมเมื่อ 2020-05-14. สืบค้นเมื่อ 3 February 2010.
* Connolly, Daniel "Dan"; Sperberg-McQueen, C. Michael, บ.ก. (21 May 2009). "Web addresses in HTML 5". World Wide Web Consortium. เก็บจากแหล่งเดิมเมื่อ 2015-07-10. สืบค้นเมื่อ 13 September 2015.
* IANA (14 February 2003). "Completion of IANA Selection of IDNA Prefix". *IETF-Announce mailing list*. คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 8 December 2004. สืบค้นเมื่อ 3 September 2015.
* "An Introduction to Multilingual Web Addresses". 9 May 2008. เก็บจากแหล่งเดิมเมื่อ 2015-01-05. สืบค้นเมื่อ 11 January 2015.
* Phillip, A. (2014). "What is Happening with "International URLs"". World Wide Web Consortium. เก็บจากแหล่งเดิมเมื่อ 2015-02-17. สืบค้นเมื่อ 11 January 2015.
* Lawrence, Eric (2014-03-06). "Browser Arcana: IP Literals in URLs". *Microsoft Learn*. เก็บจากแหล่งเดิมเมื่อ 22 June 2020. สืบค้นเมื่อ 22 June 2020.

## แหล่งข้อมูลอื่น

* URL specification at WHATWG
* URL splitter that splits any URI into its parts