Neuerungen in WinHTTP 5.1
In diesem Thema werden die wichtigsten Unterschiede zwischen WinHTTP Version 5.1 und Version 5.0 beschrieben. Viele dieser Unterschiede erfordern Codeänderungen in Anwendungen, die von Version 5.0 zu Version 5.1 migriert werden. Einige der Features in Version 5.1 sind nur ab Windows Server 2003 und Windows XP mit Service Pack 2 (SP2) verfügbar, insbesondere Features im Zusammenhang mit der Verbesserung der Sicherheit des Clients gegenüber bösartigen Webservern.
Wichtig
Mit der Veröffentlichung von WinHTTP Version 5.1 ist der WinHTTP 5.0-Download nicht mehr verfügbar. Seit dem 1. Oktober 2004 hat Microsoft den WinHTTP 5.0 SDK-Download entfernt und den Produktsupport für Version 5.0 beendet.
DLL-Namensänderung
Der Name der neuen WinHTTP 5.1-DLL ist Winhttp.dll, während der Name der WinHTTP 5.0-DLL Winhttp5.dll ist.
WinHTTP 5.0 und 5.1 können in einem System koexistieren; WinHTTP 5.1 ersetzt WinHTTP 5.0 nicht.
Weiterverteilung
WinHTTP 5.1 ist nur mit Windows Server 2003, Windows 2000 Professional mit Service Pack 3 (SP3), Windows XP mit Service Pack 1 (SP1) und höheren Betriebssystemen verfügbar. Für WinHTTP 5.1 ist keine weiterverteilbare Zusammenführungsmoduldatei (.msm) verfügbar.
WinHttpRequest ProgID
Die ProgID der WinHttpRequest-Komponente wurde von „WinHttp.WinHttpRequest.5“ zu „WinHttp.WinHttpRequest.5.1“ geändert. Die CLSID der WinHttpRequest-Klasse wurde ebenfalls geändert.
Änderung des asynchronen Rückrufverhaltens
Beim Aufruf der Funktionen WinHttpWriteData, WinHttpQueryDataAvailable und WinHttpReadData im asynchronen Modus, sollten Sie sich nicht darauf verlassen, dass die Parameter lpdwNumberOfBytesWritten, lpdwNumberOfBytesAvailable und lpdwNumberOfBytesRead OUT eingerichtet werden. Wenn der Funktionsaufruf asynchron abgeschlossen wird, schreibt WinHTTP nicht in diese Zeiger, die vom Anwendungscode bereitgestellt werden. Stattdessen sollte die Anwendung diese Werte mit den Parametern lpvStatusInformation und dwStatusInformationLength für die Rückruffunktion abrufen.
Änderungen an Standardeinstellungen
Änderungen an Standardeinstellungen sind u. a.:
- Die SSL-Serverzertifikatüberprüfung ist in WinHTTP 5.1 standardmäßig aktiviert. WinHTTP 5.0 behandelt beim Überprüfen des Serverzertifikats Fehler nicht als schwerwiegende Fehler; sie werden der Anwendung mithilfe einer SECURE_FAILURE-Rückrufbenachrichtigung gemeldet, führen jedoch nicht dazu, dass die Anforderung abgebrochen wird. WinHTTP 5.1 behandelt hingegen Fehler bei der Serverzertifikatüberprüfung als schwerwiegende Fehler, die die Anforderung abbrechen. Die Anwendung kann WinHTTP mithilfe der Option WINHTTP_OPTION_SECURITY_FLAGS anweisen, eine kleine Teilmenge von Zertifikatfehlern wie etwa „unbekannte Zertifizierungsstelle“, „ungültiges/abgelaufenes Zertifikatdatum“ oder „ungültiger Zertifikatantragstellername“ zu ignorieren.
- Die Passport-Authentifizierungsunterstützung ist in WinHTTP 5.1 standardmäßig deaktiviert. Die Passport-Unterstützung kann mit der Option WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH aktiviert werden. Die automatische Suche nach Passport-Anmeldeinformationen im Keyring ist standardmäßig ebenfalls deaktiviert.
- Änderung des Umleitungsverhaltens: HTTP-Umleitungen von einer sicheren https:-URL zu einer regulären http:-URL werden aus Sicherheitsgründen nicht mehr automatisch durchgeführt. Es gibt eine neue Option, WINHTTP_OPTION_REDIRECT_POLICY, um das Standardumleitungsverhalten in WinHTTP 5.1 außer Kraft zu setzen. Verwenden Sie mit der WinHttpRequest-COM-Komponente die neue Option WinHttpRequestOption_EnableHttpsToHttpRedirects, um Umleitungen von https:- zu http:-URLs zu aktivieren.
- Wenn eine WinHTTP-Ablaufverfolgungsdatei erstellt wird, wird der Zugriff mit einer ACL eingeschränkt, sodass nur Administratoren die Datei lesen oder schreiben können. Das Benutzerkonto, unter dem die Ablaufverfolgungsdatei erstellt wurde, kann auch die ACL ändern, um anderen Zugriff zu gewähren. Dieser Schutz ist nur auf Dateisystemen verfügbar, die Sicherheit unterstützen; das heißt, NTFS, nicht FAT32.
- Ab Windows Server 2003 und Windows XP mit SP2 ist das Senden von Anforderungen an die folgenden bekannten nicht HTTP-Ports aus Sicherheitsgründen eingeschränkt: 21 (FTP), 25 (SMTP), 70 (GOPHER), 110 (POP3), 119 (NNTP), 143 (IMAP).
- Ab Windows Server 2003 und Windows XP mit SP2 beträgt die maximale Menge an Headerdaten, die WinHTTP in einer HTTP-Antwort akzeptiert, standardmäßig 64 KB. Wenn die HTTP-Antwort des Servers mehr als 64 KB Headerdaten enthält, lässt WinHTTP die Anforderung mit einem ERROR_WINHTTP_INVALID_SERVER_RESPONSE-Fehler fehlschlagen. Dieser Grenzwert von 64 KB kann mithilfe der neuen Option WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE außer Kraft gesetzt werden.
IPv6-Unterstützung
WinHTTP 5.1 bietet Unterstützung für Internet Protocol Version 6 (IPv6). WinHTTP kann HTTP-Anforderungen an einen Server senden, dessen DNS-Name in eine IPv6-Adresse aufgelöst wird, und ab Windows Server 2003 und Windows XP mit SP2 unterstützt WinHTTP auch IPv6-Literaladressen.
Neue Optionen in der C/C++-API für WinHTTP
WinHTTP 5.1 implementiert die folgenden neuen Optionen:
- „\#define WINHTTP\_OPTION\_PASSPORT\_SIGN\_OUT 86“ „\#define WINHTTP\_OPTION\_PASSPORT\_RETURN\_URL 87“ „\#define WINHTTP\_OPTION\_REDIRECT\_POLICY 88“
Ab Windows Server 2003 und Windows XP mit SP2 implementiert WinHTTP 5.1 die folgenden neuen Optionen. Unter Windows 2000 Professional mit SP3 oder Windows XP mit SP1 schlagen jedoch Aufrufe von WinHttpSetOption oder WinHttpQueryOption mit diesen Options-IDs fehl:
- „\#define WINHTTP\_OPTION\_RECEIVE\_RESPONSE\_TIMEOUT 7" "\#define WINHTTP\_OPTION\_MAX\_HTTP\_AUTOMATIC\_REDIRECTS 89" "\#define WINHTTP\_OPTION\_MAX\_HTTP\_STATUS\_CONTINUE 90" "\#define WINHTTP\_OPTION\_MAX\_RESPONSE\_HEADER\_SIZE 91" "\#define WINHTTP\_OPTION\_MAX\_RESPONSE\_DRAIN\_SIZE 92“
Neue Optionen in der WinHttpRequest 5.1-Komponente
Die WinHttpRequest 5.1-Komponente implementiert die folgenden neuen Optionen:
- „WinHttpRequestOption\_RevertImpersonationOverSsl“ „WinHttpRequestOption\_EnableHttpsToHttpRedirects“ „WinHttpRequestOption\_EnablePassportAuthentication“
Die folgenden neuen WinHttpRequest 5.1-Optionen sind ab Windows Server 2003 und Windows XP mit SP2 verfügbar:
- „WinHttpRequestOption\_MaxAutomaticRedirects“ „WinHttpRequestOption\_MaxResponseHeaderSize“ „WinHttpRequestOption\_MaxResponseDrainSize“ „WinHttpRequestOptions\_EnableHttp1\_1“
Proxys sind nicht vertrauenswürdig, wenn die Sicherheit der automatischen Anmeldung auf „Hoch“ festgelegt ist.
In WinHTTP 5.0 sind Proxyserver für die automatische Anmeldung immer vertrauenswürdig. Dies ist nicht mehr gültig für WinHTTP 5.1 unter Windows Server 2003 und Windows XP mit SP2, wenn die Richtlinienoption WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH festgelegt ist.
Web Proxy Auto-Discovery (AutoProxy)-API
Um die Konfiguration der Proxyeinstellungen für auf WinHTTP basierende Anwendungen zu vereinfachen, implementiert WinHTTP jetzt das Web Proxy Auto-Discovery (WPAD)-Protokoll, das auch als Autoproxy bezeichnet wird. Dies ist dasselbe Protokoll, das Webbrowser wie Internet Explorer implementieren, um die Proxykonfiguration automatisch zu ermitteln, ohne dass ein Endbenutzer einen Proxyserver manuell angeben muss. Um Autoproxy zu unterstützen, implementiert WinHTTP 5.1 eine neue C/C++-Funktion, WinHttpGetProxyForUrl, sowie zwei unterstützende Funktionen, WinHttpDetectAutoProxyConfigUrl und WinHttpGetIEProxyConfigForCurrentUser.
Bekannte Probleme
Die folgenden Probleme sind in WinHTTP 5.1 unter Windows 2000 Professional mit SP3 und Windows XP mit SP1 bekannt. Diese Probleme wurden für WinHTTP ab Windows Server 2003 und Windows XP mit SP2 behoben:
- Wenn die Anwendung die Funktion WinHttpSetTimeouts oder die Methode SetTimeouts auf der WinHttpRequest-Komponente verwendet, um ein nicht-unendliches DNS-Auflösungstimeout zu setzen, wie etwa den Parameter dwResolveTimeout verwendet, tritt bei jeder Auflösung eines DNS-Namens durch WinHTTP ein Thread-Handle-Leak auf. Bei einer großen Anzahl von HTTP-Anforderungen verursacht dies einen erheblichen Speicherverlust. Die Problemumgehung besteht darin, die standardmäßige unendliche Auflösungstimeout-Einstellung unverändert zu lassen (ein Wert von 0 gibt ein unendliches Timeout an). Dies wird in jedem Fall dringend empfohlen, da die Unterstützung von Timeouts für DNS-Namensauflösungen in WinHTTP große Leistungseinbußen beinhaltet. Für Windows 2000 und höher ist das Festlegen eines Timeouts für die DNS-Auflösung in WinHTTP nicht erforderlich, da der zugrunde liegende DNS-Clientdienst ein eigenes Auflösungstimeout implementiert.
- Bei der Verarbeitung asynchroner Anforderungen verarbeitet WinHTTP den Threadwechsel nicht ordnungsgemäß. Dies führt dazu, dass Anforderungen, die NTLM/Negotiate-Authentifizierung erfordern, fehlschlagen, es sei denn, Anmeldeinformationen werden explizit mithilfe der Funktionen WinHttpSetCredentials oder WinHttpSetOption angegeben.