Поделиться через


Поддержка IP-адресов версии 6

Начиная с IE7 и более поздних версий WinINet поддерживает литералы IPv6 в имени узла и компоненте центра URI. WinINet также поддерживает использование литералов IPv6 в соответствующих участках протокола HTTP, например в заголовке Location.

Литералы IPv6 имени узла и компоненты URI

WinINet реализует литералы IPv6 в соответствии со спецификациями RFC 3513. Как указано в этом RFC, литералы IPv6 в URI должны быть заключены в квадратные скобки. Например, https://[::1]/ является допустимым универсальным кодом ресурса (URI) IPv6; форма без скобок (https://::1/) недопустимая. Однако литералы IPv6 имени узла, которые не являются частью URI, не нужно заключать в квадратные скобки; Любая из форм является приемлемой для WinINet. Например, и "::1", и "[::1]" являются допустимыми формами литерал имени узла IPv6. Другие API, такие как API WinSock, также будут принимать обе формы. Таким образом, приложения должны быть подготовлены к обработке обеих форм литералы имен узлов IPv6.

Идентификатор области

Литеральный адрес IPv6 в URI может содержать идентификатор область. Идентификатор область может быть идентификатором интерфейса, например [FE80::1%1]. Стандарт URI, документируемый в RFC 3986, не определяет синтаксис для идентификатора область, и URI считается неоднородным при наличии идентификатора область. Однако WinINet принимает идентификатор область в компоненте центра URI и в литерале IPv6 имени узла.

Символ процента (%) в адресе литерала IPv6 должен быть экранирован, если он присутствует в URI. Например, идентификатор область FE80::2%3 должен отображаться в URI как "https://[FE80::2%253]/", где %25 — это шестнадцатеричный символ процента (%). Если приложение получает URI из API Юникода, например WINSOCK WSAAddressToString API, приложение должно добавить escape-версию символа процента (%) в имя узла URI. Чтобы создать escape-версию URI, приложения вызывают InternetCreateUrl с параметром dwFlags , равным ICU_ESCAPE_AUTHORITY, и именем узла IPv6, указанным в структуре компонентов URL-адресов, указанной в параметре lpUrlComponents .

Для всех операций с сокетами WinINet использует идентификатор область. Однако, поскольку идентификатор область имеет только значение локального узла, он не отправляется как часть заголовков протокола HTTP в запросе. Например, вызов InternetOpenUrl вызывается со следующим URL-адресом в параметре lpszUrl .

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

Часть идентификатора область URL-адреса удаляется WinINet при отправке HTTP-запроса для этого URL-адреса. Запрос содержит следующие заголовки:

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

Примечание

WinINet не поддерживает реализации сервера. Кроме того, его не следует использовать из службы. Для серверных реализаций или служб используйте службы Microsoft Windows HTTP (WinHTTP).