IP Version 6-Unterstützung
Ab IE7 und höher 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 eckige 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 Formulare sind für WinINet akzeptabel. Beispielsweise sind sowohl "::1" als auch "[::1]" zulässige Formen von IPv6-Hostnamenliteralen. Andere APIs, z. B. die WinSock-API, akzeptieren auch 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 sein, z. B. [FE80::1%1]. Der in RFC 3986 dokumentierte URI-Standard definiert nicht die Syntax für die Bereichs-ID, 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 sie im URI vorhanden ist. Beispielsweise muss die Bereichs-ID FE80::2%3im URI als "https://[FE80::2%253]/" angezeigt werden, wobei %25 das hexadekodierte Prozentzeichen (%) ist. Wenn die Anwendung den URI aus einer Unicode-API abruft, z. B. die Winsock WSAAddressToString-API, 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 parameter dwFlags auf ICU_ESCAPE_AUTHORITYfestgelegt ist, und der in der URL-Komponentenstruktur angegebene IPv6-Hostname, der in der lpUrlComponents Parameter angegeben ist.
Für alle Socketvorgänge verwendet WinINet die Bereichs-ID. Da die Bereichs-ID jedoch nur die lokale Host-Bedeutung hat, 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]
Anmerkung
WinINet unterstützt keine Serverimplementierungen. Darüber hinaus sollte sie nicht von einem Dienst verwendet werden. Verwenden Sie für Serverimplementierungen oder -dienste Microsoft Windows HTTP Services (WinHTTP).