Novinky ve WinHTTP 5.1
Toto téma popisuje nejdůležitější rozdíly mezi WinHTTP verze 5.1 a verzí 5.0. Mnoho z těchto rozdílů vyžaduje změny kódu v aplikacích migrovaných z verze 5.0 na verzi 5.1. Některé z funkcí ve verzi 5.1 jsou dostupné pouze od systémů Windows Server 2003 a Windows XP s aktualizací Service Pack 2 (SP2), zejména funkce související se zlepšením zabezpečení klienta proti škodlivým webovým serverům.
Důležitý
S vydáním WinHTTP verze 5.1 už není WinHTTP 5.0 k dispozici ke stažení. Od 1. října 2004 společnost Microsoft odebrala stažení sady WinHTTP 5.0 SDK a ukončila podporu produktů pro verzi 5.0.
Změna názvu knihovny DLL
Název nové knihovny DLL WinHTTP 5.1 je Winhttp.dll, zatímco název knihovny DLL WinHTTP 5.0 je Winhttp5.dll.
WinHTTP 5.0 a 5.1 může existovat ve stejném systému; WinHTTP 5.1 nenahrazuje ani se neinstaluje přes WinHTTP 5.0.
Přerozdělování
WinHTTP 5.1 je k dispozici pouze v systémech Windows Server 2003, Windows 2000 Professional s aktualizací Service Pack 3 (SP3), Windows XP s aktualizací Service Pack 1 (SP1) a novějšími operačními systémy. Soubor redistribuovatelného slučovacího modulu (.msm) není k dispozici pro WinHTTP 5.1.
WinHttpRequest Identifikátor programu
Identifikátor ProgID komponenty WinHttpRequest se změnil z WinHttp.WinHttpRequest.5 na WinHttp.WinHttpRequest.5.1. Identifikátor CLSID třídy WinHttpRequest se také změnil.
Změna chování asynchronního zpětného volání
Při volání funkcí WinHttpWriteData, WinHttpQueryDataAvailable a WinHttpReadData v asynchronním režimu nespoléhejte na to, že příslušné OUT parametry lpdwNumberOfBytesWritten, lpdwNumberOfBytesAvailablea lpdwNumberOfBytesRead budou nastaveny. Pokud se volání funkce dokončí asynchronně, WinHTTP nezapisuje do těchto ukazatelů poskytnutých aplikačním kódem. Místo toho by aplikace měla načíst tyto hodnoty pomocí parametrů lpvStatusInformation a dwStatusInformationLength funkce zpětného volání.
Změny výchozího nastavení
Mezi změny výchozího nastavení patří:
- Ověření certifikátu serveru SSL je ve výchozím nastavení povolené ve WinHTTP 5.1. WinHTTP 5.0 nezpracovává chyby, ke kterým došlo při ověřování certifikátu serveru jako závažné chyby; Jsou hlášeny aplikaci pomocí oznámení o zpětném volání SECURE_FAILURE, ale nezpůsobí přerušení žádosti. WinHTTP 5.1, případně zpracovává selhání ověření certifikátu serveru jako závažné chyby, které žádost přeruší. Aplikace může instruovat WinHTTP, aby ignorovala malou podmnožinu chyb certifikátu, jako je neznámá certifikační autorita, datum certifikátu s neplatnou platností nebo neplatný název subjektu certifikátu, pomocí možnosti WINHTTP_OPTION_SECURITY_FLAGS.
- Podpora ověřování passportem je ve výchozím nastavení ve Službě WinHTTP 5.1 zakázaná. Podporu pasportu je možné povolit pomocí možnosti WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH. Automatické vyhledávání přihlašovacích údajů passportu v keyringu je ve výchozím nastavení také zakázané.
- Změna chování přesměrování: Přesměrování HTTP ze zabezpečené adresy https: na běžnou adresu http: se z bezpečnostních důvodů již automaticky nenásleduje. Existuje nová možnost, WINHTTP_OPTION_REDIRECT_POLICY, pro změnu výchozího chování přesměrování ve WinHTTP 5.1. Pomocí komponenty COM WinHttpRequest použijte novou možnost WinHttpRequestOption_EnableHttpsToHttpRedirects k povolení přesměrování z https: URL na http: URL.
- Při vytvoření trasovacího souboru WinHTTP je přístup omezen seznamem ACL tak, aby soubor mohli číst nebo zapisovat jenom správci. Uživatelský účet, pod kterým byl vytvořen tracefile, může také upravit seznam ACL tak, aby udělil ostatním přístup. Tato ochrana je k dispozici pouze v systémech souborů, které podporují zabezpečení; to znamená NTFS, ne FAT32).
- Od systémů Windows Server 2003 a Windows XP s aktualizací SP2 je odesílání požadavků na následující dobře známé, jiné než HTTP, porty jsou omezené z bezpečnostních důvodů: 21 (FTP), 25 (SMTP), 70 (GOPHER), 110 (POP3), 119 (NNTP), 143 (IMAP).
- Počínaje systémem Windows Server 2003 a Windows XP s aktualizací SP2 je ve výchozím nastavení maximální množství dat hlaviček, které WinHTTP přijme v odpovědi HTTP, 64 K. Pokud odpověď HTTP serveru obsahuje více než 64K celkových dat hlaviček, WinHTTP požadavek selže s chybou ERROR_WINHTTP_INVALID_SERVER_RESPONSE. Tento limit 64 KB je možné přepsat pomocí nové volby WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE.
Podpora protokolu IPv6
WinHTTP 5.1 přidává podporu pro protokol IPv6 (Internet Protocol Version 6). WinHTTP může odesílat požadavky HTTP na server, jehož název DNS se překládá na adresu IPv6, a počínaje systémem Windows Server 2003 a Windows XP s aktualizací SP2 podporuje winHTTP také adresy literálů IPv6.
Nové možnosti v rozhraní API C/C++ pro WinHTTP
WinHTTP 5.1 implementuje následující nové možnosti:
- "\#define WINHTTP\_OPTION\_PASSPORT\_SIGN\_OUT 86" "\#define WINHTTP\_OPTION\_PASSPORT\_RETURN\_URL 87" "\#define WINHTTP\_OPTION\_REDIRECT\_POLICY 88"
Počínaje systémy Windows Server 2003 a Windows XP s aktualizací SP2 implementuje WinHTTP 5.1 následující nové možnosti. V systému Windows 2000 Professional s aktualizací SP3 nebo Windows XP s aktualizací SP1 však volání WinHttpSetOption nebo WinHttpQueryOption s těmito ID možností selžou:
- "\#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"
Nové možnosti v komponentě WinHttpRequest 5.1
Komponenta WinHttpRequest 5.1 implementuje následující nové možnosti:
- "WinHttpRequestOption\_RevertImpersonationOverSsl" "WinHttpRequestOption\_EnableHttpsToHttpRedirects" "WinHttpRequestOption\_EnablePassportAuthentication"
Následující nové možnosti WinHttpRequest 5.1 jsou k dispozici od systémů Windows Server 2003 a Windows XP s aktualizací SP2:
- "WinHttpRequestOption\_MaxAutomaticRedirects" "WinHttpRequestOption\_MaxResponseHeaderSize" "WinHttpRequestOption\_MaxResponseDrainSize" "WinHttpRequestOptions\_EnableHttp1\_1"
Proxy servery nejsou důvěryhodné, pokud je zabezpečení automatického přihlášení nastaveno na vysoké
Ve WinHTTP 5.0 jsou proxy servery vždy důvěryhodné pro automatické přihlášení. Toto již neplatí pro WinHTTP 5.1 spuštěné na Windows Server 2003 a Windows XP s aktualizací SP2, pokud je nastavena možnost zásad WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH.
Rozhraní API automatického zjišťování webového proxy serveru (AutoProxy)
Aby se usnadnila konfigurace nastavení proxy serveru pro aplikace založené na winHTTP, WinHTTP teď implementuje protokol WPAD (Web Proxy Auto-Discovery), označovaný také jako autoproxy. Jedná se o stejný protokol, který webové prohlížeče, například Internet Explorer, implementují tak, aby automaticky zjistily konfiguraci proxy serveru, aniž by koncový uživatel musel zadat proxy server ručně. Pro podporu autoproxy WinHTTP 5.1 implementuje novou funkci C/C++, WinHttpGetProxyForUrl, plus dvě podpůrné funkce, WinHttpDetectAutoProxyConfigUrl a WinHttpGetIEProxyConfigForCurrentUser.
Známé problémy
Ve WinHTTP 5.1 na systému Windows 2000 Professional s aktualizací SP3 a Windows XP s aktualizací SP1 existují následující problémy. Tyto problémy jsou vyřešeny pro WinHTTP počínaje systémem Windows Server 2003 a Windows XP s aktualizací SP2:
- Pokud aplikace používá WinHttpSetTimeouts funkci nebo SetTimeouts metodu v komponentě WinHttpRequest k nastavení nenekonečného časového limitu překladu DNS, jako je například dwResolveTimeout parametr, dojde k úniku popisovače vlákna pokaždé, když WinHTTP přeloží název DNS. Při velkém počtu požadavků HTTP to způsobuje významný únik paměti. Alternativním řešením je ponechat výchozí nastavení časového limitu nekonečného řešení beze změny (hodnota 0 určuje nekonečný časový limit). Důrazně se to doporučuje v každém případě, protože podpora časových limitů překladů názvů DNS ve službě WinHTTP je nákladná z hlediska výkonu. V systému Windows 2000 a novějších není nastavení časového limitu překladu DNS ve službě WinHTTP zbytečné, protože základní klientská služba DNS implementuje vlastní časový limit překladu.
- Při zpracování asynchronních požadavků winHTTP nezpracovává zosobnění vlákna správně. To způsobí selhání požadavků, které vyžadují ověřování NTLM/Negotiate, pokud nejsou přihlašovací údaje explicitně předány pomocí WinHttpSetCredentials nebo WinHttpSetOption funkcí.