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

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

答案1

在这种情况下,符号是将 IPv6 IP 号码编码在方括号中:

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

那是RFC 3986,第 3.2.2 节:主机

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

相关内容