Pertanyaan Bagaimana seseorang dapat membedakan host dan port di URL IPv6?


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 host, dan saya ingin terhubung dengannya dengan HTTP di port 100?

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

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


80
2017-11-24 22:48






Jawaban:


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

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

Itu RFC 3986, bagian 3.2.2: Host

Sebuah host yang diidentifikasi oleh alamat literal Internet Protocol, versi 6       [RFC3513] atau lebih baru, dibedakan dengan melampirkan IP literal       dalam tanda kurung siku ("[" dan "]"). Ini adalah satu-satunya tempat di mana       karakter braket persegi dibolehkan dalam sintaks URI. Di       mengantisipasi masa depan, format alamat IP literal yang belum ditentukan,       suatu implementasi dapat menggunakan bendera versi opsional untuk menunjukkan seperti itu       format secara eksplisit daripada bergantung pada tekad heuristik.


111
2017-11-24 22:51



Ini perlu menunjukkan bahwa tanda kurung tidak pilihan. Ini satu-satunya mekanisme yang tidak ambigu dimana peramban dapat mengidentifikasi alamat IPv6 numerik. - tylerl
Bukankah seharusnya port berada di dalam kurung? - jayarjo
@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♦