Share via


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 migrieren. 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 vor böswilligen 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 eingestellt.

 

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 gleichzeitig auf demselben System vorhanden sein. WinHTTP 5.1 ersetzt WinHTTP 5.0 nicht oder installiert es 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. Eine verteilbare Mergemoduldatei (.msm) ist für WinHTTP 5.1 nicht verfügbar.

WinHttpRequest ProgID

Die ProgID der WinHttpRequest-Komponente wurde von "WinHttp.WinHttpHttpRequest.5" in "WinHttp.WinHttpRequest.5.1" geändert. Die CLSID der WinHttpRequest-Klasse wurde ebenfalls geändert.

Änderung des Verhaltens des Asynchronen Rückrufs

Wenn Sie die Funktionen WinHttpWriteData, WinHttpQueryDataAvailable und WinHttpReadData im asynchronen Modus aufrufen, verwenden Sie nicht die jeweiligen festzulegenden OUT-Parameter lpdwNumberOfBytesWritten, lpdwNumberOfBytesAvailable und lpdwNumberOfBytesRead . Wenn der Funktionsaufruf asynchron abgeschlossen wird, schreibt WinHTTP nicht in diese vom Anwendungscode bereitgestellten Zeiger. Stattdessen sollte die Anwendung diese Werte mithilfe der Parameter lpvStatusInformation und dwStatusInformationLength für die Rückruffunktion abrufen.

Änderungen an den Standardeinstellungen

Zu den Änderungen an den Standardeinstellungen gehören:

  • Die SSL-Serverzertifikatüberprüfung ist in WinHTTP 5.1 standardmäßig aktiviert. WinHTTP 5.0 behandelt Fehler, die beim Überprüfen des Serverzertifikats auftreten, 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 alternativ Fehler bei der Überprüfung von Serverzertifikaten als schwerwiegende Fehler, die die Anforderung abbrechen. Die Anwendung kann WinHTTP anweisen, mithilfe der Option WINHTTP_OPTION_SECURITY_FLAGS eine kleine Teilmenge von Zertifikatfehlern wie eine unbekannte Zertifizierungsstelle, ein ungültiges/abgelaufenes Zertifikatdatum oder einen ungültigen Zertifikatantragstellernamen zu ignorieren.
  • 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 verfolgt. Es gibt eine neue Option , WINHTTP_OPTION_REDIRECT_POLICY, um das Standardverhalten der Umleitung in WinHTTP 5.1 zu überschreiben. 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 Zugriffssteuerungsliste ändern, um anderen Zugriff zu gewähren. Dieser Schutz ist nur für Dateisysteme 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.000. Wenn die HTTP-Antwort des Servers mehr als 64.000 Der gesamten Headerdaten enthält, schlägt WinHTTP die Anforderung mit einem ERROR_WINHTTP_INVALID_SERVER_RESPONSE Fehler fehl. Dieser Grenzwert von 64 KB kann mit der neuen option WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE außer Kraft gesetzt werden.

IPv6-Unterstützung

WinHTTP 5.1 fügt Unterstützung für Internet Protocol Version 6 (IPv6) hinzu. WinHTTP kann HTTP-Anforderungen an einen Server senden, dessen DNS-Name in eine IPv6-Adresse aufgelöst wird. 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 Aufrufe von WinHttpSetOption oder WinHttpQueryOption mit den folgenden Options-IDs jedoch 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 für die automatische Anmeldung auf "Hoch" festgelegt ist.

In WinHTTP 5.0 sind Proxyserver für die automatische Anmeldung immer vertrauenswürdig. Dies ist für WinHTTP 5.1 unter Windows Server 2003 und Windows XP mit SP2 nicht mehr gültig, wenn die WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH-Richtlinienoption festgelegt ist.

AutoProxy-API (AutoProxy)

Um die Konfiguration von Proxyeinstellungen für WinHTTP-basierte Anwendungen zu vereinfachen, implementiert WinHTTP jetzt das WPAD-Protokoll (Web Proxy Auto-Discovery), 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. Zur Unterstützung von Autoproxy implementiert WinHTTP 5.1 die neue C/C++-Funktion WinHttpGetProxyForUrl sowie die beiden unterstützenden 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 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 festzulegen, z. B. den DwResolveTimeout-Parameter , tritt jedes Mal ein Threadhandle auf, wenn WinHTTP einen DNS-Namen auflöst. Bei einer großen Anzahl von HTTP-Anforderungen führt dies zu einem erheblichen Speicherverlust. Die Problemumgehung besteht darin, die Standardmäßige Timeouteinstellung für unendliche Auflösung 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 in Bezug auf die Leistung teuer ist. Für Windows 2000 und höher ist das Festlegen eines DNS-Auflösungstimeouts in WinHTTP nicht erforderlich, da der zugrunde liegende DNS-Clientdienst einen eigenen Auflösungstimeout implementiert.
  • Bei der Verarbeitung asynchroner Anforderungen verarbeitet WinHTTP den Threadidentitätswechsel nicht ordnungsgemäß. Dies führt dazu, dass Anforderungen, die eine NTLM/Negotiate-Authentifizierung erfordern, fehlschlagen, es sei denn, Anmeldeinformationen werden explizit mithilfe der WinHttpSetCredentials - oder WinHttpSetOption-Funktionen angegeben.