ถ้าคุณอยากนิยาม Well-Known URI
(mnot.net)- เมื่อไคลเอนต์รู้จักเว็บไซต์นั้นอยู่แล้ว และต้องค้นหาข้อมูลระดับทั้งเว็บไซต์อย่างมีประสิทธิภาพ Well-Known URI เหมาะที่สุด
- การวางนโยบายไว้ที่ตำแหน่งศูนย์กลางแบบ
robots.txtช่วยลดการตรวจซ้ำได้ แต่ก็ใช้เพื่อเปิดการโต้ตอบระดับทั้งเว็บไซต์อย่างchange-passwordได้เช่นกัน - หากโปรโตคอลสามารถส่ง URL จริงได้ การใช้ Well-Known URI จะทำให้ บริการกับเว็บไซต์ถูกผูกแบบ 1:1 จนการปรับใช้และการทำ routing แข็งตัวเกินไป
- เมื่อนำไปใช้กับกลไกการค้นพบหรือ metadata ของเนื้อหา ควรพิจารณา โครงสร้างการปฏิบัติการ อย่างชื่อโฮสต์เริ่มต้น ตำแหน่งค้นหา การรีไดเร็กต์ และเว็บไซต์ที่มีผู้เผยแพร่หลายรายก่อน
- หากต้องย้ายจากพาธคงที่ที่รูทเดิม จำเป็นต้องมีแผนการเปลี่ยนผ่าน และควรระบุสคีมที่เกี่ยวข้องนอกเหนือจาก
http·httpsให้ชัดเจนเพื่อเพิ่มโอกาสในการลงทะเบียนสำเร็จ
สถานการณ์ที่ Well-Known URI เหมาะสม
- Mark Nottingham หนึ่งในผู้เขียน Well-Known URI specification และเป็น Designated Expert ของ registry ได้แชร์เกณฑ์เชิงปฏิบัติว่าเมื่อใดควรใช้ Well-Known URI
- เกณฑ์เหล่านี้ไม่ใช่ข้อกำหนดการลงทะเบียนทั้งหมด แต่ใกล้เคียงกับ แนวปฏิบัติที่ดี มากกว่า
- ตำแหน่ง Well-Known เหมาะเมื่อไคลเอนต์รู้จักเว็บไซต์นั้นอยู่แล้ว และต้องค้นพบบางอย่างหรือโต้ตอบกับบางอย่างในระดับทั้งเว็บไซต์
- ในที่นี้ เว็บไซต์ในเชิงเทคนิคหมายถึง origin ซึ่งเป็นทูเพิล
(scheme, host, port)
- ในที่นี้ เว็บไซต์ในเชิงเทคนิคหมายถึง origin ซึ่งเป็นทูเพิล
- แม้ robots.txt จะมีอยู่ก่อน RFC แต่ก็เป็นหนึ่งในเหตุผลหลักที่ทำให้มีการสงวนพื้นที่ Well-Known
- crawler จำเป็นต้องรู้ว่านโยบายการเข้าถึงของเว็บไซต์เป็นอย่างไร
- การวางนโยบายไว้ในตำแหน่งศูนย์กลางทำให้ไม่ต้องตรวจ header และเนื้อหาของทุกการตอบกลับ
- ตำแหน่ง Well-Known ไม่จำเป็นต้องเก็บเฉพาะนโยบายเท่านั้น
- หากเป็นกลไกที่ไคลเอนต์รู้จักเว็บไซต์นั้นอยู่แล้ว และต้องเรียนรู้หรือโต้ตอบกับบางอย่างในระดับทั้งเว็บไซต์ ก็อาจเป็นผู้สมัครที่เหมาะสม
- ตำแหน่ง Well-Known ของ
change-passwordช่วยให้ไคลเอนต์เปลี่ยนรหัสผ่านของเว็บไซต์นั้นได้
กรณีที่มันกลายเป็นเครื่องมือที่ไม่เหมาะ
- บางการออกแบบกำหนดตำแหน่ง Well-Known ไม่ใช่เพราะปัญหาจริง แต่เพราะ มันดูเหมือนควรทำแบบนั้น
- การมีรายการในพื้นที่ลงทะเบียนไม่ได้หมายความว่าจะตามมาด้วยความชอบธรรมหรืออัตราการยอมรับใช้งาน
- ตำแหน่ง Well-Known แก้ปัญหาเฉพาะแบบ “ไคลเอนต์รู้จักเว็บไซต์อยู่แล้ว และมีบางอย่างที่ต้องใช้ในระดับทั้งเว็บไซต์”
- หากโปรโตคอลไม่ได้มีปัญหาแบบนั้น การลงทะเบียนอาจสร้างปัญหาใหม่ และไม่ได้นำไปสู่การยอมรับใช้งานตามที่คาด
- ข้อเสนอบางอย่างใช้ตำแหน่ง Well-Known เสมือนเป็น ตัวย่อ URL
- ในโปรโตคอลจะส่งเฉพาะเว็บไซต์ที่เกี่ยวข้อง ไม่ได้ส่ง URL แบบเต็ม
- แล้วตำแหน่ง Well-Known จะเติมส่วนพาธที่เหลือให้
- แพตเทิร์นนี้ทำให้บริการกับเว็บไซต์ถูกตรึงไว้ใน ความสัมพันธ์แบบ 1:1
- หากการปรับใช้ต้องใช้หลายบริการ ก็ต้องสร้างเว็บไซต์อื่นเพิ่ม
- และยังต้องมีวิธีแยกต่างหากเพื่อส่งผู้ใช้ไปยังเว็บไซต์ที่เหมาะสม
- หากโปรโตคอลส่งได้จริงแค่ชื่อโฮสต์ การใช้ตำแหน่ง Well-Known ก็อาจสมเหตุสมผล
- แต่ถ้าใช้ URL จริงได้ ก็มักจะดีกว่าที่จะไม่ใช้ตำแหน่ง Well-Known และหากเลือกใช้เพราะความสะดวกหรือเพราะให้ความรู้สึกเป็นทางการ การปรับใช้อาจแข็งตัวโดยไม่จำเป็น
กับดักที่เกิดในกลไกการค้นพบ
- โปรโตคอลจำนวนมากพยายามใช้ตำแหน่ง Well-Known เป็น กลไกการค้นพบ โดยตั้งอยู่บนสมมติฐานว่า “ผู้ใช้รู้จักเว็บไซต์นั้นอยู่แล้ว”
- แต่ในความเป็นจริง ขอบเขตการโต้ตอบปัจจุบันของผู้ใช้กับตำแหน่งที่เกิดการค้นพบอาจไม่ตรงกัน
- หากไคลเอนต์เริ่มที่
login.example.comก็จะเกิดคำถามว่าควรค้นหาตำแหน่ง Well-Known ที่เว็บไซต์นั้น หรือที่example.com - ต้องกำหนดด้วยว่าควรตามการรีไดเร็กต์จากฝั่งหนึ่งไปอีกฝั่งหนึ่งหรือไม่
- และอาจไม่ชัดเจนว่าผู้เผยแพร่ควรให้ตำแหน่ง Well-Known ไว้ที่เว็บไซต์ใดเพื่อให้ทำงานร่วมกันได้
- หากไคลเอนต์เริ่มที่
- ปัญหานี้ยิ่งสำคัญเมื่อโปรโตคอลไม่ได้จัดการกับตัวเว็บไซต์จริง ๆ แต่ใช้ HTTP เพื่อจุดประสงค์อื่น
- อาจอยากกำหนดให้วางตำแหน่ง Well-Known ของชื่อโดเมนที่จดทะเบียนได้ไว้ที่ apex แต่ในบางสภาพแวดล้อมอาจทำได้ยากในเชิงปฏิบัติการ
- โปรโตคอลในกลุ่มนี้ต้องพิจารณาทั้งสิ่งที่กำลังค้นพบ และตำแหน่งที่ผู้ใช้เริ่มต้นไปพร้อมกัน
- ต้องกำหนดวิธีค้นหาชื่อโฮสต์ที่ถูกต้องได้อย่างเสถียร โดยไม่ตั้งสมมติฐานเกี่ยวกับสถาปัตยกรรมเว็บมากเกินไป
ข้อแลกเปลี่ยนเมื่อใช้กับ metadata ของเนื้อหา
- บางโปรโตคอลพยายามใช้ตำแหน่ง Well-Known เพื่อเรียนรู้เกี่ยวกับเนื้อหาของเว็บไซต์
/robots.txtทำงานในลักษณะนี้ แต่แพตเทิร์นนี้ไม่ได้เข้ากับ metadata ของเนื้อหาทุกแบบได้ง่ายเสมอไป- เว็บไซต์จำนวนมากเป็นตัวแทนของผู้เผยแพร่หลายราย
- ตัวอย่างคือธรรมเนียม
/~username/ในอดีต
- ตัวอย่างคือธรรมเนียม
- การวาง metadata ของเนื้อหาไว้ในตำแหน่งศูนย์กลางทำให้เกิดปัญหาสองอย่าง
- กลไกนั้นอาจแทบใช้งานไม่ได้จริงสำหรับผู้ใช้แต่ละราย
- ผู้ดูแลระบบอาจต้องสร้างโครงสร้างพื้นฐานที่ซับซ้อนเพื่อรองรับการควบคุมของผู้ใช้และการกำกับดูแล
- การปรับใช้แบบนี้แสดงให้เห็นถึงข้อแลกเปลี่ยนระหว่าง ความสะดวกกับความละเอียด
- อาจจำเป็นต้องสร้างกลไก metadata แบบขนานใน HTTP response header หรือตัวเนื้อหาเอง
- และยังต้องจัดระเบียบวิธีแนบ metadata ที่แตกต่างกันด้วย
- ไม่ใช่ว่าจะใช้ตำแหน่ง Well-Known กับ metadata ของทรัพยากรไม่ได้ แต่การทำเช่นนั้นอาจต้องใช้แรงมากกว่าที่คาดมาก
- โปรโตคอลที่ใช้ตำแหน่ง Well-Known กับ metadata ของทรัพยากรต้องคำนึงถึงโครงสร้างเว็บไซต์ที่หลากหลายบนเว็บ
สิ่งที่ควรพิจารณาเมื่อลงทะเบียนและเปลี่ยนผ่าน
- มีข้อเสนอบางอย่างที่นิยามตำแหน่งคงที่ไว้ที่รูทอยู่ก่อนแล้ว
- กรณีแบบนี้เช่น
/robots.txtที่มารู้จักตำแหน่ง Well-Known ภายหลัง
- กรณีแบบนี้เช่น
- ในกรณีเช่นนี้ จำเป็นต้องมี แผนการเปลี่ยนผ่าน สำหรับการปรับใช้เดิม
- ผู้เสนอมีแนวโน้มจะโฟกัสกับฐานการปรับใช้ปัจจุบันมากเกินไป
- หากมีแผนการเปลี่ยนผ่านที่ดีในช่วงเวลาที่สมเหตุสมผล ก็สามารถจัดการการย้ายไปยังตำแหน่ง Well-Known ได้
- ข้อเสนอจำนวนมากตั้งสมมติฐานโดยนัยว่าเป็น URL แบบ
httpและhttps - ตำแหน่ง Well-Known ใช้ได้กับ URL scheme อื่นด้วย จึงควร ระบุสคีมที่เกี่ยวข้องให้ชัดเจน
- ตำแหน่ง Well-Known จำเป็นต้องลงทะเบียน
- ลิงก์ดังกล่าวมีแนวทางว่าเมื่อใดควรลงทะเบียน และควรเลือกชื่ออย่างไร
- แนวทางการลงทะเบียนนี้ต่างจากคำแนะนำก่อนหน้า เพราะมีผลต่อโอกาสสำเร็จในการลงทะเบียนจริง
1 ความคิดเห็น
ความเห็นใน Hacker News
อยากให้ใช้แนวทางแบบนี้แทนการสร้างมาตรฐานใหม่ใน root namespace อยู่เรื่อย ๆ นึกถึง llms.txt เป็นตัวอย่าง
เลิกทำให้โดเมนรูทเลอะเทอะได้แล้วก็น่าจะดี
https://llmstxt.org/
ไม่เห็นด้วย บทความนี้ไม่ได้ช่วยอะไรเท่าไรอยู่ดี เนื้อหาแทบไม่มีและเหมือนพูดแต่เรื่องที่รู้อยู่แล้ว
ถ้าไม่มีตัวอย่างที่นำไปสู่คำแนะนำเชิงปฏิบัติจริง ความเชี่ยวชาญที่ผู้เขียนยกมาก็แทบไม่มีประโยชน์
https://en.wikipedia.org/wiki/Hyper_Text_Coffee_Pot_Control_Protocol#Save_418_movement
~userบทความนี้อาจช่วยให้คนพวกนั้นใช้วิธีที่ดีกว่าได้ ถึงอย่างนั้นถ้ายังมั่นใจว่าต้องใช้ well-known URL ก็ยังมีลิงก์ไปขั้นตอนการลงทะเบียนให้ด้วย
robots.txtก็ไม่ควรวางไว้แบบสุ่ม ๆ แต่ต้อง บอกให้รู้ว่ามันอยู่ที่ไหนไม่เข้าใจว่าทำไมต้องเจาะจงขนาดนั้น ทำ link tree ที่ใช้งานทั่วไปได้แทน
password-resetไม่ได้หรือ?แม้แต่การยืนยันโดเมนของ Discord ก็น่าจะทำเป็นรายการแบบไดนามิกใต้
domain-verificationsได้ ดูเหมือนเสียเวลาเปล่า สำหรับการใช้งานของผมคงนิยามสเปกของตัวเองไว้นอก well-known มากกว่าwell-known endpoint ของ
password-resetใช้เพื่อให้ตัวจัดการรหัสผ่านแสดงปุ่ม "Change password..." ใน UI แล้วพาไปยังหน้าสำหรับเปลี่ยนรหัสผ่านที่ระบุไว้ในไฟล์ well-known นั้นได้โดยตรงdiscord domain verificationนั้น TXT record เองก็เป็นรายการของรายการแบบไดนามิกอยู่แล้ว จึงง่ายกว่าโครงสร้างแยกต่างหากหมายความว่าไล่ดูรายการแล้วเทียบช่วงต้นของแต่ละค่ากับสตริงที่ค้นหาเพื่อหา
discord domain verificationจะง่ายกว่ามากตัวอย่างเช่น TXT record ของ
ycombinator.comมีค่ารวมกันอย่างopenai-domain-verification=...,anthropic-domain-verification-...,google-site-verification=...,apple-domain-verification=...,dropbox-domain-verification=...,rippling-domain-verification=...discord domain verificationเป็นปัญหาฝั่ง Discord ไม่ได้อยู่ใน IANA registry: https://www.iana.org/assignments/well-known-uris/well-known-uris.xhtmlส่วนเรื่องทำ
password-resetให้เป็น link tree ที่ใช้งานทั่วไปได้มากขึ้นนั้น มีคำตอบไว้ละเอียดกว่าในเธรดข้างเคียง: https://news.ycombinator.com/item?id=48596286ไม่ว่าจะใช้
.well-known, DNS record หรือ DNS over HTTP ก็ตาม ผมคิดว่าสิ่งสำคัญคือการทำให้ค้นพบได้เองโดยอาศัย ความเชื่อถือที่ผูกกับโดเมนCloudflare ดูเหมือนจะเพิ่มความสามารถในการสังเกตการณ์ในพื้นที่นี้เข้าไปในผลิตภัณฑ์พอสมควรแล้ว และผมก็กำลังสำรวจอยู่เช่นกัน: https://instagrate-me.sudoscience.dev/
ยิ่งการใช้งานแบบเอเจนต์เพิ่มขึ้น จำนวนบริการที่ต้องการสิ่งนี้และปริมาณที่แต่ละองค์กรต้องใช้ก็น่าจะเพิ่มขึ้นด้วย
auth.mdก็ดูเป็นอีกตัวอย่างล่าสุดที่ใช้.well-known“เว็บไซต์นี้ต้องใช้เบราว์เซอร์ที่ทันสมัยกว่านี้เพื่อทำงานอย่างปลอดภัย กรุณาอัปเกรดเบราว์เซอร์ของคุณ”
อีกทางเลือกหนึ่งคือ ทำได้แม้ไม่มี SNI
https://web.archive.org/web/20260619061625if_/https://mnot.net/blog/2026/well_known_uris
เพราะงั้นมันดีมาก
registry ของ
change-passwordมีการใช้งานจริงไหม? ไม่แน่ใจด้วยซ้ำว่าบอตใช้หรือเปล่าในไซต์ของผมไม่เคยเห็นบอตเช็ก URL
.well-known/change-passwordเลย มันอาจเหมาะเป็นที่วางการตั้งค่าแบบสาธารณะ แต่ไม่เหมือนเป็น กลไกสำหรับการค้นพบฟีเจอร์นี้อิงจาก
.well-known/change-password.well-knownเริ่มต้นมาอย่างเรียบร้อยดี แต่เงียบ ๆ กลายเป็น ลิ้นชักรวมของจุกจิก ของเว็บรูทไปแล้วsecurity.txt, ACME,app-site-associationและอย่างอื่นก็เพิ่มขึ้นเรื่อย ๆดูเหมือนคนจะมองข้ามกันบ่อยว่า หนึ่งโดเมนมี well-known ได้หลายรายการ
ชื่อเรื่องเขียนว่า URI แต่ในบทความพูดถึงแค่ URL ซึ่งเป็น URI ชนิดหนึ่งเท่านั้น
แล้ว URI เหล่านั้นมัน well-known แค่ไหนกันจริง ๆ? :-\
.well-knownแต่ไม่เจอสักอันเคยอ่านเจออันหนึ่งมาก่อนตอนทำงานกับ GitHub OIDC และตอนนั้นมันมีประโยชน์ทีเดียว
ไม่เข้าใจว่าทำไมเอกสารเทคนิคชอบใช้อธิบายแนวคิดแบบยืดยาว แต่ไม่ยกตัวอย่างสักอย่าง นี่ไม่ใช่ครั้งแรกที่เจอแบบนี้
พูดจริง ๆ ชื่อนี้มันย้อนแย้ง
/index.htmlนั่นแหละคือ URL ที่ well-known ตามความหมายตรงตัว และนักพัฒนาเว็บส่วนใหญ่ก็รู้จัก แต่การสร้าง URL จำนวนมากที่มีความหมายกำหนดไว้ล่วงหน้าแล้วติดป้ายว่า “well-known” ไม่ได้ทำให้มันกลายเป็นที่รู้จักขึ้นมาจริง ๆ