Neues 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 migrieren. Einige 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 vor schädlichen 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 von MSDN 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.
WinHTTP 5.0 und 5.1 können auf demselben System gleichzeitig verwendet werden. WinHTTP 5.1 ersetzt oder installiert 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öher verfügbar. Eine weiterverteilte Mergemoduldatei (MSM) ist für WinHTTP 5.1 nicht verfügbar.
WinHttpRequest ProgID
Die ProgID der WinHttpRequest-Komponente wurde von "WinHttp.WinHttpRequest.5" in "WinHttp.WinHttpRequest.5.1" geändert. Die CLSID der WinHttpRequest-Klasse wurde ebenfalls geändert.
Änderung des asynchronen Rückrufverhaltens
Verlassen Sie sich beim Aufrufen der Funktionen WinHttpWriteData, WinHttpQueryDataAvailable und WinHttpReadData im asynchronen Modus nicht darauf, dass die entsprechenden Parameter lpdwNumberOfBytesWritten, lpdwNumberOfBytesAvailable und lpdwNumberOfBytesRead OUT festgelegt werden. Wenn der Funktionsaufruf asynchron abgeschlossen wird, schreibt WinHTTP nicht in diese Zeiger, die vom Anwendungscode bereitgestellt werden. Stattdessen sollte die Anwendung diese Werte mithilfe der Parameter lpvStatusInformation und dwStatusInformationLength für die Rückruffunktion abrufen.
Änderungen an standard Einstellungen
Zu den Änderungen an den Standardeinstellungen gehören:
- Die ÜBERPRÜFUNG des SSL-Serverzertifikats ist in WinHTTP 5.1 standardmäßig aktiviert. WinHTTP 5.0 behandelt fehler, die beim Überprüfen des Serverzertifikats aufgetreten sind, nicht als schwerwiegende Fehler. Sie werden der Anwendung mithilfe einer SECURE _ FAILURE-Rückrufbenachrichtigung gemeldet, führen jedoch nicht zum Abbruch der Anforderung. WinHTTP 5.1 behandelt alternativ Serverzertifikatüberprüfungsfehler als schwerwiegende Fehler, die die Anforderung abbrechen. Die Anwendung kann WinHTTP mithilfe der Option WINHTTP _ OPTION SECURITY _ _ FLAGS anweisen, eine kleine Teilmenge von Zertifikatfehlern zu ignorieren, z. B. unbekannte Zertifizierungsstelle, ungültiges/abgelaufenes Zertifikatdatum oder ungültiger Zertifikatantragantragsname.
- Die Unterstützung der Passport-Authentifizierung ist in WinHTTP 5.1 standardmäßig deaktiviert. Passport-Unterstützung kann mit der Option WINHTTP _ OPTION CONFIGURE _ PASSPORT _ _ AUTH aktiviert werden. Die automatische Suche nach Passport-Anmeldeinformationen im Schlüsselring ist ebenfalls standardmäßig deaktiviert.
- Änderung des Umleitungsverhaltens: HTTP-Umleitungen von einem sicheren HTTPS:-URL zu einem regulären HTTP:-URL werden aus Sicherheitsgründen nicht mehr automatisch befolgt. Es gibt eine neue Option, WINHTTP _ OPTION REDIRECT _ _ POLICY, um das Standardumleitungsverhalten in WinHTTP 5.1 zu überschreiben. Verwenden Sie bei 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 Zugriffssteuerungsliste eingeschränkt, damit nur Administratoren die Datei lesen oder schreiben können. Das Benutzerkonto, unter dem die Ablaufverfolgungsdatei erstellt wurde, kann auch die Zugriffssteuerungsliste ändern, um anderen Benutzern 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 Ports ohne HTTP 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 ist die maximale Menge an Headerdaten, die WinHTTP in einer HTTP-Antwort akzeptiert, standardmäßig 64K. Wenn die HTTP-Antwort des Servers mehr als 64.000 Headerdaten enthält, schlägt WinHTTP die Anforderung mit dem Fehler _ WINHTTP _ INVALID SERVER _ _ RESPONSE fehl. Dieser Grenzwert von 64K kann mithilfe der neuen OPTION WINHTTP _ OPTION MAX RESPONSE HEADER SIZE _ _ _ _ überschrieben werden.
IPv6-Unterstützung
WinHTTP 5.1 fügt Unterstützung für Internetprotokoll Version 6 (IPv6) hinzu. WinHTTP kann HTTP-Anforderungen an einen Server senden, dessen DNS-Name in eine IPv6-Adresse auflöset, 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. Auf Windows 2000 Professional sp3 oder Windows XP mit SP1 können Aufrufe von WinHttpSetOption oder WinHttpQueryOption mit diesen Options-IDs jedoch fehlschlagen:
- " \# 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 werden nicht als vertrauenswürdig eingestuft, wenn die Sicherheit für die automatische Anmeldung auf "Hoch" festgelegt ist.
In WinHTTP 5.0 werden Proxyserver für die automatische Anmeldung immer als vertrauenswürdig eingestuft. Dies gilt nicht mehr für WinHTTP 5.1 unter Windows Server 2003 und Windows XP mit SP2, wenn die Richtlinienoption WINHTTP _ AUTOLOGON _ SECURITY LEVEL _ _ HIGH festgelegt ist.
Webproxy-API für die automatische Ermittlung (AutoProxy)
Um die Konfiguration von Proxyeinstellungen für WinHTTP-basierte Anwendungen zu erleichtern, implementiert WinHTTP jetzt das WPAD-Protokoll (Web Proxy Auto-Discovery), das auch als automatischer Proxy bezeichnet wird. Dies ist das gleiche Protokoll, das Webbrowser wie Internet Explorer implementieren, um die Proxykonfiguration automatisch zu bestimmen, ohne dass ein Endbenutzer einen Proxyserver manuell angeben muss. Zur Unterstützung des automatischen Proxys implementiert WinHTTP 5.1 die neue C/C++-Funktion WinHttpGetProxyForUrlsowie zwei unterstützende Funktionen: WinHttpDetectAutoProxyConfigUrl und WinHttpGetIEProxyConfigForCurrentUser.
Bekannte Probleme
Die folgenden Probleme sind in WinHTTP 5.1 auf Windows 2000 Professional mit SP3 und Windows XP mit SP1 bekannt. Diese Probleme werden für WinHTTP ab Windows Server 2003 und Windows XP mit SP2 behoben:
- Wenn die Anwendung die WinHttpSetTimeouts-Funktion oder die SetTimeouts-Methode für die WinHttpRequest-Komponente verwendet, um ein nicht unendliches DNS-Auflösungstimeout wie den dwResolveTimeout-Parameter zu setzen, tritt jedes Mal ein Threadhandlaufverlust auf, wenn WinHTTP einen DNS-Namen auflöst. Bei einer großen Anzahl von HTTP-Anforderungen führt dies zu einem erheblichen Arbeitsspeicherverlust. Die Problemumgehung besteht in der unveränderten Standardeinstellung für das unendliche Auflösungs-Timeout (der Wert 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 in Bezug auf die Leistung teuer ist. Für Windows 2000 und höher ist das Festlegen eines DNS-Auflösungs-Timeouts in WinHTTP nicht erforderlich, da der zugrunde liegende DNS-Clientdienst ein eigenes Auflösungs-Timeout implementiert.
- Bei der Verarbeitung asynchroner Anforderungen behandelt WinHTTP den Threadpersonation-Identitätswechsel nicht ordnungsgemäß. Dies führt dazu, dass Anforderungen, die die NTLM/Negotiate-Authentifizierung erfordern, fehlschlagen, es sei denn, Anmeldeinformationen werden explizit mithilfe der WinHttpSetCredentials- oder WinHttpSetOption-Funktionen angegeben.