Freigeben über


IP-Version 6-Unterstützung

Ab IE7 unterstützt WinINet IPv6-Literale im Hostnamen und die Autoritätskomponente des URI. WinINet unterstützt auch die Verwendung von IPv6-Literalen in relevanten Teilen des HTTP-Protokolls, z. B. im Location-Header.

Hostname IPv6-Literale und URI-Komponenten

WinINet implementiert IPv6-Literale gemäß den Spezifikationen in RFC 3513. Wie in diesem RFC angegeben, müssen IPv6-Literale in einem URI in Klammern eingeschlossen werden. Beispielsweise ist https://[::1]/ ein gültiger IPv6-URI. das Formular ohne Klammern (https://::1/) ist ungültig. Hostname-IPv6-Literale, die nicht Teil des URI sind, müssen jedoch nicht in die Klammern eingeschlossen werden. Beide Formen sind für WinINet akzeptabel. Beispielsweise sind sowohl ":::1" als auch "[::1]" akzeptable Formen von IPv6-Hostnamenliteralen. Andere APIs, z. B. die WinSock-API, akzeptieren ebenfalls beide Formulare. Daher sollten Anwendungen darauf vorbereitet sein, beide Formen von IPv6-Hostnamenliteralen zu verarbeiten.

Bereichs-ID

Die IPv6-Literaladresse im URI kann eine Bereichs-ID enthalten. Eine Bereichs-ID kann eine Schnittstellen-ID wie [FE80::1%1] sein. Der in RFC 3986 dokumentierte URI-Standard definiert die Syntax für die Bereichs-ID nicht, und der URI gilt als nicht einheitlich, wenn die Bereichs-ID vorhanden ist. WinINet akzeptiert jedoch eine Bereichs-ID in der Autoritätskomponente des URI und im Hostnamen-IPv6-Literal.

Das Prozentzeichen (%) in der IPv6-Literaladresse muss prozentual escaped sein, wenn es im URI vorhanden ist. Beispielsweise muss die Bereichs-ID FE80::2%3 im URI als "https://[FE80::2%253]/" angezeigt werden, wobei %25 das sechste codierte Prozentzeichen () ist. Wenn die Anwendung den URI aus einer Unicode-API wie der Winsock-WSAAddressToString-API abruft, muss die Anwendung die Escapeversion des Prozentzeichens (%) im Hostnamen des URI hinzufügen. Um die Escapeversion des URI zu erstellen, rufen Anwendungen InternetCreateUrl auf, wobei der dwFlags-Parameter auf ICU_ESCAPE_AUTHORITY festgelegt ist, und dem IPv6-Hostnamen, der in der URL-Komponentenstruktur angegeben ist, die im parameter lpUrlComponents angegeben ist.

Für alle Socketvorgänge verwendet WinINet die Bereichs-ID. Da die Bereichs-ID jedoch nur eine lokale Host-Bedeutung aufweist, wird sie nicht als Teil der HTTP-Protokollheader in der Anforderung gesendet. Beispielsweise wird der Aufruf von InternetOpenUrl mit der folgenden URL im lpszUrl-Parameter aufgerufen.

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

Der Bereichs-ID-Teil der URL wird von WinINet entfernt, wenn die HTTP-Anforderung für diese URL gesendet wird. Die Anforderung enthält die folgenden Header:

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

Hinweis

WinINet unterstützt keine Serverimplementierungen. Darüber hinaus sollte es nicht von einem Dienst aus verwendet werden. Verwenden Sie für Serverimplementierungen oder Dienste Microsoft Windows HTTP Services (WinHTTP).