หนึ่งจะแยกแยะความแตกต่างโฮสต์และพอร์ตใน IPv6 URL ได้อย่างไร


87

URL มีรูปแบบนี้เสมอ:

<protocol>://<host>[:<port>]/[<path>][#<hash>]

ปัญหาคือ IPv6 ใช้ colons เหมือนกับตัวแยกพอร์ตและโฮสต์เช่น:

2001:db8:1f70::999:de8:7648:6e8

แต่ถ้าเป็นโฮสต์และฉันต้องการเชื่อมต่อกับ HTTP บนพอร์ต 100

http://2001:db8:1f70::999:de8:7648:6e8:100/

ปัญหาคือลำไส้ใหญ่สุดท้าย เนื่องจากศูนย์ถูกละเว้นด้วยเครื่องหมายโคลอนคู่ (ระหว่าง 1f70 ถึง 999) จึงไม่ทราบว่า ': 100' เป็นของ IP หรือหมายเลขพอร์ต เราจะรู้สิ่งนี้ได้อย่างไร?

คำตอบ:


118

สัญกรณ์ในกรณีนั้นคือการเข้ารหัสหมายเลข IPv6 IP ในวงเล็บเหลี่ยม:

http://[2001:db8:1f70::999:de8:7648:6e8]:100/

นั่นคือRFC 3986 , ส่วน 3.2.2: โฮสต์

โฮสต์ที่ระบุโดยที่อยู่อินเทอร์เน็ตโพรโทคอลตามตัวอักษร, รุ่น 6 [RFC3513] หรือใหม่กว่านั้นแตกต่างกันโดยการปิด IP ตามตัวอักษรภายในวงเล็บเหลี่ยม ("[" และ "]") นี่เป็นที่เดียวที่อนุญาตให้ใช้อักขระวงเล็บเหลี่ยมในไวยากรณ์ URI ในการคาดการณ์อนาคตรูปแบบที่อยู่ IP ตามตัวอักษรที่ยังไม่ได้กำหนดการใช้งานอาจใช้การตั้งค่าสถานะรุ่นที่เป็นตัวเลือกเพื่อระบุรูปแบบดังกล่าวอย่างชัดเจนมากกว่าที่จะขึ้นอยู่กับการตัดสินใจแก้ปัญหา


38
เป็นมูลค่าชี้ให้เห็นว่าวงเล็บไม่ได้เป็นตัวเลือก มันเป็นเพียงกลไกที่ชัดเจนซึ่งเบราว์เซอร์สามารถระบุที่อยู่ IPv6 ที่เป็นตัวเลข
tylerl

พอร์ตไม่ควรอยู่ในวงเล็บหรือ
jayarjo

2
@jayarjo ไม่เป็นวงเล็บจะมีการแก้ความกำกวมระหว่างที่อยู่ IP ซึ่งมีเครื่องหมายโคลอนและพอร์ตซึ่งแยกออกจากที่อยู่ IP โดยโคลอน
sysadmin1138
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.