Bagaimana cara membedakan host dan port di URL IPv6?

87

URL selalu memiliki format ini:

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

Masalahnya adalah bahwa IPv6 menggunakan titik dua, seperti pemisah port dan host, misalnya:

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

Tetapi bagaimana jika ini adalah tuan rumah, dan saya ingin menghubungkannya dengan HTTP pada port 100?

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

Masalahnya adalah usus besar terakhir. Karena nol dihilangkan dengan titik dua (antara 1f70 dan 999), tidak diketahui apakah ': 100' milik IP atau nomor port. Bagaimana kita bisa tahu ini?

sayap kanan
sumber

Jawaban:

118

Notasi dalam hal ini adalah untuk menyandikan nomor IP IPv6 dalam tanda kurung:

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

Itu RFC 3986 , bagian 3.2.2: Host

Host yang diidentifikasi oleh alamat literal Protokol Internet, versi 6 [RFC3513] atau lebih baru, dibedakan dengan melampirkan IP literal dalam tanda kurung siku ("[" dan "]"). Ini adalah satu-satunya tempat di mana karakter kurung siku diperbolehkan dalam sintaks URI. Untuk mengantisipasi format alamat IP literal IP yang belum ditentukan di masa depan, suatu implementasi dapat menggunakan flag versi opsional untuk menunjukkan format seperti itu secara eksplisit daripada mengandalkan tekad heuristik.

sysadmin1138
sumber
38
Perlu ditunjukkan bahwa tanda kurung tidak opsional. Ini satu-satunya mekanisme yang tidak ambigu dimana browser dapat mengidentifikasi alamat IPv6 numerik.
tylerl
Bukankah seharusnya port ada di dalam kurung?
jayarjo
2
@jayarjo Tidak, karena tanda kurung ada untuk memberikan disambiguasi antara alamat IP, yang berisi titik dua, dan port, yang dipisahkan dari alamat IP oleh titik dua.
sysadmin1138