IP 版本 6 支持

从 IE7 及更高版本开始,WinINet 支持主机名中的 IPv6 文本以及 URI 的授权组件。 WinINet 还支持在 HTTP 协议的相关部分(例如位置标头)中使用 IPv6 文本。

主机名 IPv6 文本和 URI 组件

WinINet 根据 RFC 3513 中的规范实现 IPv6 文本。 如此 RFC 中指定的,URI 中的 IPv6 文本必须括在方括号中。 例如,https://[::1]/是有效的 IPv6 URI;没有括号 (https://::1/) 的窗体无效。 但是,不属于 URI 的主机名 IPv6 文本不需要括在括号中:WinINet 可以接受任一形式。 例如,“::1”和“[:1]”都是 IPv6 主机名文本的可接受形式。 其他 API(如 WinSock API)也将接受这两种形式。 因此,应用程序应准备好处理这两种形式的 IPv6 主机名文本。

作用域 ID

URI 中的 IPv6 文本地址可能包括范围 ID。 范围 ID 可以是接口 ID,例如 [FE80::1%1]。 RFC 3986 中记录的 URI 标准未定义范围 ID 的语法,当范围 ID 存在时,URI 被视为非统一。 但是,WinINet 在 URI 的颁发机构组件和主机名 IPv6 文本中接受范围 ID。

IPv6 文本地址中 (%) 的百分比字符必须在 URI 中存在时进行百分比转义。 例如,范围 ID FE80::2%3,必须在 URI 中显示为“https://[FE80::2%253]/”,其中 %25 是 (%) 的十六进制编码百分比字符。 如果应用程序从 Unicode API(如 Winsock WSAAddressToString API)检索 URI,则应用程序必须在 URI 的主机名中添加百分比字符的转义版本 (%) 。 若要创建 URI 的转义版本,应用程序使用 dwFlags 参数设置为ICU_ESCAPE_AUTHORITY调用 InternetCreateUrl,以及 lpUrlComponents 参数中指定的 URL 组件结构中指定的 IPv6 主机名。

对于所有套接字操作,WinINet 使用范围 ID。 但是,由于范围 ID 仅具有本地主机意义,因此它不会作为请求中的 HTTP 协议标头的一部分发送。 例如,使用 lpszUrl 参数中的以下 URL 调用 InternetOpenUrl

https://[fec0::2%251]:80/path.htm

当为此 URL 发送 HTTP 请求时,WinINet 会删除 URL 的范围 ID 部分。 请求包含以下标头:

GET path.htm HTTP/1.1
Host: [fec0::2]

注意

WinINet 不支持服务器实现。 此外,不应从服务使用它。 对于服务器实现或服务,请使用 Microsoft Windows HTTP 服务 (WinHTTP)