如何区分IPv6 URL中的主机和端口?

url始终采用以下格式:

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

问题是IPv6使用冒号,就像端口和主机的分隔符一样,例如:

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

但是,如果这是主机,我想用端口100上的HTTP连接到它呢?

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

问题是最后一个冒号。 由于零是用双冒号省略的(1f70到999之间),所以不知道':100'是属于IP还是端口号。 我们怎么知道这个?

    这种情况下的表示法是在方括号中编码IPv6 IP号码:

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

    这是RFC 3986 ,第3.2.2节:主机

    IP地址版本6 [RFC3513]或更高版本标识的主机通过在方括号(“[”和“]”)中包含IP字符来区分。 这是在URI语法中允许方括号字符唯一的地方。 在未来的未来,尚未定义的IP文字地址格式中,一个实现可以使用一个可选的版本标志来明确地指示这种格式,而不是依赖启发式确定。