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还是端口号。我们怎么知道呢?

#1 楼

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

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


这是RFC 3986,第3.2.2节:主机


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

评论


值得指出的是,括号不是可选的。这是浏览器可以识别数字IPv6地址的唯一明确机制。

– tylerl
10 Nov 25'3:58

端口不应该放在括号内吗?

– Jayarjo
16 Dec 20'在15:30

@jayarjo不,因为这里使用方括号可消除包含冒号的IP地址与以冒号与IP地址分隔的端口之间的歧义。

– sysadmin1138♦
16/12/22在13:26