Udostępnij za pośrednictwem


Co nowego w programie WinHTTP 5.1

W tym temacie opisano najważniejsze różnice między wersją WinHTTP w wersji 5.1 a wersją 5.0. Wiele z tych różnic wymaga zmian kodu w aplikacjach migrujących z wersji 5.0 do wersji 5.1. Niektóre funkcje w wersji 5.1 są dostępne tylko w systemach Windows Server 2003 i Windows XP z dodatkiem Service Pack 2 (SP2), szczególnie funkcje związane z poprawianiem bezpieczeństwa klienta przed złośliwymi serwerami sieci Web.

Ważny

Wraz z wydaniem WinHTTP w wersji 5.1, pobieranie WinHTTP 5.0 nie jest już dostępne. Od 1 października 2004 r. firma Microsoft usunęła pobieranie zestawu SDK WinHTTP 5.0 i przerwała pomoc techniczną dotyczącą produktu dla wersji 5.0.

 

Zmiana nazwy biblioteki DLL

Nazwa nowej biblioteki DLL WinHTTP 5.1 jest Winhttp.dll, natomiast nazwa biblioteki DLL WinHTTP 5.0 jest Winhttp5.dll.

WinHTTP 5.0 i 5.1 mogą współistnieć w tym samym systemie; Usługa WinHTTP 5.1 nie zastępuje ani nie instaluje aplikacji WinHTTP 5.0.

Redystrybucja

WinHTTP 5.1 jest dostępny tylko w systemie Windows Server 2003, Windows 2000 Professional z dodatkiem Service Pack 3 (SP3), Windows XP z dodatkiem Service Pack 1 (SP1) i nowszymi systemami operacyjnymi. Plik modułu scalania redystrybucyjnego (.msm) nie jest dostępny dla WinHTTP 5.1.

Identyfikator progu WinHttpRequest

Identyfikator ProgID składnika WinHttpRequest zmienił się z "WinHttp.WinHttpRequest.5" na "WinHttp.WinHttpRequest.5.1". Identyfikator CLSID klasy WinHttpRequest również uległ zmianie.

Zmiana zachowania asynchronicznego wywołania zwrotnego

Podczas wywoływania funkcji WinHttpWriteData, WinHttpQueryDataAvailable i WinHttpReadData w trybie asynchronicznym, nie należy polegać na odpowiednich OUT parametrów lpdwNumberOfBytesWritten, lpdwNumberOfBytesAvailablei lpdwNumberOfBytesRead, aby były ustawione. Jeśli wywołanie funkcji zakończy się asynchronicznie, WinHTTP nie zapisuje w tych wskaźnikach dostarczonych przez kod aplikacji. Zamiast tego aplikacja powinna pobrać te wartości przy użyciu parametrów lpvStatusInformation i dwStatusInformationLength w funkcji wywołania zwrotnego.

Zmiany ustawień domyślnych

Zmiany ustawień domyślnych obejmują:

  • Weryfikacja certyfikatu serwera SSL jest domyślnie włączona w programie WinHTTP 5.1. WinHTTP 5.0 nie obsługuje błędów napotkanych podczas sprawdzania poprawności certyfikatu serwera jako błędów krytycznych; są one zgłaszane do aplikacji przy użyciu SECURE_FAILURE powiadomienia zwrotnego, ale nie powoduje przerwania żądania. WinHTTP 5.1, alternatywnie, obsługuje błędy weryfikacji certyfikatu serwera jako błędy krytyczne, które przerywają żądanie. Aplikacja może poinstruować WinHTTP, aby zignorował niewielki podzestaw błędów certyfikatu, takich jak nieznany urząd certyfikacji, nieprawidłowa/wygasła data certyfikatu lub nieprawidłowa nazwa podmiotu certyfikatu, używając opcji WINHTTP_OPTION_SECURITY_FLAGS.
  • Obsługa uwierzytelniania paszportowego jest domyślnie wyłączona w systemie WinHTTP 5.1. Obsługę usługi Passport można włączyć za pomocą opcji WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH. Automatyczne wyszukiwanie poświadczeń Passport w aplikacji Keyring jest również domyślnie wyłączone.
  • Zmiana zachowania przekierowania: przekierowania z protokołu HTTP z bezpiecznego https: na zwykły http: adres URL nie są już automatycznie śledzone ze względów bezpieczeństwa. Istnieje nowa opcja, WINHTTP_OPTION_REDIRECT_POLICY, aby zastąpić domyślne zachowanie przekierowania w WinHTTP 5.1. W przypadku składnika WinHttpRequest COM użyj nowej opcji WinHttpRequestOption_EnableHttpsToHttpRedirects, aby włączyć przekierowania z adresów URL typu https: do http:.
  • Po utworzeniu pliku śledzenia WinHTTP dostęp jest ograniczony za pomocą ACL, tak aby tylko administratorzy mogli odczytywać lub zapisywać plik. Konto użytkownika, w ramach którego utworzono plik tracefile, może również zmodyfikować listę ACL, aby przyznać innym osobom dostęp. Ta ochrona jest dostępna tylko w systemach plików, które obsługują zabezpieczenia; oznacza to, NTFS, a nie FAT32).
  • Począwszy od systemu Windows Server 2003 i Windows XP z dodatkiem SP2, wysyłanie żądań do następujących dobrze znanych portów innych niż HTTP jest ograniczone ze względów bezpieczeństwa: 21 (FTP), 25 (SMTP), 70 (GOPHER), 110 (POP3), 119 (NNTP), 143 (IMAP).
  • Począwszy od systemu Windows Server 2003 i Windows XP z dodatkiem SP2, maksymalna ilość danych nagłówka, jaką WinHTTP akceptuje w odpowiedzi HTTP, wynosi domyślnie 64K. Jeśli odpowiedź HTTP serwera zawiera więcej niż 64 000 całkowitych informacji nagłówka, WinHTTP nie udaje się wykonać żądania z błędem ERROR_WINHTTP_INVALID_SERVER_RESPONSE. Ten limit 64K można zastąpić przy użyciu nowej opcji WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE.

Obsługa protokołu IPv6

WinHTTP 5.1 dodaje obsługę protokołu internetowego w wersji 6 (IPv6). WinHTTP może wysyłać żądania HTTP do serwera, którego nazwa DNS jest rozpoznawana na adres IPv6, a począwszy od systemu Windows Server 2003 i Windows XP z dodatkiem SP2, WinHTTP obsługuje również adresy literałów IPv6.

Nowe opcje w interfejsie API języka C/C++ dla winHTTP

WinHTTP 5.1 implementuje następujące nowe opcje:

"\#define WINHTTP\_OPTION\_PASSPORT\_SIGN\_OUT 86" "\#define WINHTTP\_OPTION\_PASSPORT\_RETURN\_URL 87" "\#define WINHTTP\_OPTION\_REDIRECT\_POLICY 88"

Począwszy od systemów Windows Server 2003 i Windows XP z dodatkiem SP2, WinHTTP 5.1 implementuje następujące nowe opcje. W systemie Windows 2000 Professional z dodatkiem SP3 lub Windows XP z dodatkiem SP1 wywołania WinHttpSetOption lub WinHttpQueryOption z tymi identyfikatorami opcji kończą się niepowodzeniem:

"\#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"

Nowe opcje w składniku WinHttpRequest 5.1

Składnik WinHttpRequest 5.1 implementuje następujące nowe opcje:

WinHttpRequestOption\_RevertImpersonationOverSsl WinHttpRequestOption\_EnableHttpsToHttpRedirects WinHttpRequestOption\_EnablePassportAuthentication

Dostępne są następujące nowe opcje WinHttpRequest 5.1 począwszy od systemów Windows Server 2003 i Windows XP z dodatkiem SP2:

"WinHttpRequestOption\_MaxAutomaticRedirects" "WinHttpRequestOption\_MaxResponseHeaderSize" "WinHttpRequestOption\_MaxResponseDrainSize" "WinHttpRequestOptions\_EnableHttp1\_1"

Serwery proxy nie są zaufane, gdy zabezpieczenia automatycznego logowania są ustawione na wysoki

W systemie WinHTTP 5.0 serwery proxy są zawsze uznawane jako podstawa do automatycznego logowania. Nie dotyczy to już WinHTTP 5.1 działającego w systemach Windows Server 2003 i Windows XP z dodatkiem SP2, gdy jest ustawiona opcja zasad WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH.

API automatycznego wykrywania serwera proxy Web (AutoProxy)

Aby ułatwić konfigurację ustawień serwera proxy dla aplikacji opartych na protokole WinHTTP, winHTTP implementuje teraz protokół automatycznego odnajdywania serwera proxy sieci Web (WPAD), nazywany również autoproxy. Jest to ten sam protokół, który przeglądarki sieci Web, takie jak Internet Explorer, implementują do automatycznego odnajdywania konfiguracji serwera proxy bez konieczności ręcznego określania serwera proxy przez użytkownika końcowego. Aby obsługiwać autoproxy, WinHTTP 5.1 implementuje nową funkcję C/C++, WinHttpGetProxyForUrl, a także dwie funkcje pomocnicze, WinHttpDetectAutoProxyConfigUrl i WinHttpGetIEProxyConfigForCurrentUser.

Znane problemy

W systemie WindowsHTTP 5.1 w systemie Windows 2000 Professional z dodatkiem SP3 i Windows XP z dodatkiem SP1 znane są następujące problemy. Te problemy zostały rozwiązane w przypadku winHTTP począwszy od systemu Windows Server 2003 i Windows XP z dodatkiem SP2:

  • Jeśli aplikacja używa funkcji WinHttpSetTimeouts lub metody SetTimeouts na składniku WinHttpRequest, aby ustawić skończony limit czasu rozpoznawania nazw DNS, taki jak parametr dwResolveTimeout, to dochodzi do wycieku uchwytu wątku za każdym razem, gdy WinHTTP rozpoznaje nazwę DNS. W przypadku dużej liczby żądań HTTP powoduje to znaczny wyciek pamięci. Obejście polega na pozostawieniu domyślnego nieskończonego ustawienia limitu czasu rozwiązywania bez zmian (wartość 0 określa nieskończony limit czasu). Jest to zdecydowanie zalecane w każdym przypadku, ponieważ obsługa limitów czasowych w rozpoznawaniu nazw DNS w usłudze WinHTTP jest kosztowna dla wydajności. W przypadku systemu Windows 2000 i nowszych ustawienie limitu czasu rozpoznawania nazw DNS w usłudze WinHTTP jest niepotrzebne, ponieważ podstawowa usługa klienta DNS implementuje własny limit czasu rozpoznawania.
  • Podczas przetwarzania żądań asynchronicznych winHTTP nie obsługuje prawidłowo personifikacji wątków. Powoduje to niepowodzenie żądań, które wymagają uwierzytelnienia NTLM/Negotiate, chyba że poświadczenia są jawnie podane przy użyciu WinHttpSetCredentials lub funkcji WinHttpSetOption.