Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważna
Wybór odpowiedniego stosu HTTP systemu Windows
| Scenario | Zalecany interfejs API |
|---|---|
| usługa systemu Windows, demon lub kod po stronie serwera | WinHTTP — przeznaczony dla usług; obsługuje personifikację, izolację sesji |
| Aplikacja desktopowa wymagająca ustawień serwera proxy w Opcjach internetowych (IE), plików cookie lub monitów o podanie poświadczeń | WinINet — automatycznie dziedziczy konfigurację opcji internetowych użytkownika |
| Nowoczesna aplikacja C++ (platforma UWP lub desktop) | Windows.Web.Http (C++/WinRT) — nowoczesne podejście asynchroniczne, obsługa nowoczesnego protokołu TLS |
| Aplikacja .NET | System.Net.Http.HttpClient — zarządzany, wieloplatformowy, z pulami połączeń |
| Międzyplatformowy język C/C++ | libcurl lub biblioteki HTTP platformy — nie specyficzne dla Windows |
Kluczowe różnice w porównaniu z WinINet: WinHTTP nie współdzieli plików cookie, pamięci podręcznej ani poświadczeń z przeglądarką użytkownika. Nie wyświetla monitów interfejsu użytkownika. Obsługuje uruchamianie przy użyciu kont usług oraz podszywania się. Zobacz WinINet vs. WinHTTP , aby zapoznać się z pełnym porównaniem funkcji.
Notatka
Wartości domyślne zabezpieczeń — usługa WinHTTP jest zgodna z konfiguracją Schannel systemu operacyjnego na potrzeby negocjacji wersji protokołu TLS. Zawsze weryfikuj certyfikaty serwera; nigdy nie ustawiaj WINHTTP_OPTION_SECURITY_FLAGS, aby ignorować błędy certyfikatów w środowisku produkcyjnym. Aby zapoznać się z konfiguracją protokołu TLS, zobacz Zagadnienia dotyczące zabezpieczeń WinHTTP.
Notatka
W przypadku kontenerów aplikacji i usług systemowych od systemu Windows 10 w wersji 1709 protokół HTTP/2 (zobacz RFC7540) jest domyślnie włączony.
Usługi HTTP systemu Microsoft Windows (WinHTTP) udostępniają obsługiwany przez serwer interfejs wysokiego poziomu do protokołów internetowych HTTP/2 i 1.1. WinHTTP jest przeznaczony do użycia głównie w scenariuszach opartych na serwerze przez aplikacje serwera komunikujące się z serwerami HTTP.
WinINet została zaprojektowana jako platforma kliencka HTTP dla interaktywnych aplikacji na komputery biurkowe. Usługa WinINet wyświetla interfejs użytkownika dla niektórych operacji, takich jak zbieranie poświadczeń użytkownika. WinHTTP obsługuje jednak te operacje programowo. Aplikacje serwera, które wymagają usług klienckich HTTP, powinny używać winHTTP zamiast WinINet. Aby uzyskać więcej informacji, zobacz Przenoszenie aplikacji WinINet do winHTTP.
WinHTTP jest również przeznaczony do użycia w usługach systemowych i aplikacjach klienckich opartych na protokole HTTP. Jednak aplikacje pojedynczego użytkownika, które wymagają funkcjonalności protokołu FTP, trwałości plików cookie, buforowania, automatycznej obsługi okien dialogowych, zgodności z programem Internet Explorer lub wsparcia dla starszych platform, powinny rozważyć użycie WinINet.
Ten interfejs jest dostępny z poziomu języków C/C++ przy użyciu interfejsu programowania aplikacji WinHTTP (API) lub interfejsów IWinHttpRequest i IWinHttpRequestEvents. WinHTTP jest również dostępny ze skryptu i programu Microsoft Visual Basic za pośrednictwem obiektu WinHTTP. Aby uzyskać więcej informacji i opisów poszczególnych funkcji, zobacz dokumentację funkcji WinHTTP dla określonego języka.
Począwszy od systemu Windows 8, WinHTTP udostępnia interfejsy API umożliwiające nawiązywanie połączeń przy użyciu protokołu WebSocketl, takich jak WinHttpWebSocketSend i WinHttpWebSocketReceive.
Ostrożność
WinHTTP nie jest reentrantny poza wywołaniem zwrotnym uzupełniania asynchronicznego. Oznacza to, że gdy wątek ma wywołanie oczekujące na jedną z funkcji WinHTTP, takich jak WinHttpSendRequest, WinHttpReceiveResponse, WinHttpQueryDataAvailable, WinHttpSendData lub WinHttpWriteData, nigdy nie może wywołać winHTTP po raz drugi, dopóki pierwsze wywołanie nie zostanie zakończone. Jednym ze scenariuszy, w których może wystąpić drugie wywołanie, jest następujące: jeśli aplikacja umieszcza w kolejce asynchroniczne wywołanie procedury (APC) do wątku, który wywołuje metodę WinHTTP, a jeśli winHTTP wykonuje oczekiwanie z możliwością alertu wewnętrznie, może zostać uruchomiona usługa APC. Jeśli rutynowa procedura APC również wywołuje WinHTTP, następuje ponowne wejście do interfejsu programistycznego WinHTTP, a wewnętrzny stan WinHTTP może zostać uszkodzony.
Funkcje winHTTP 5.1
W wersji 5.1 usługi WinHTTP dodano następujące funkcje:
- Obsługa protokołu IPv6.
- Możliwości autoproxy.
- Protokół HTTP/1.0, w tym obsługa trwałych połączeń (keep-alive) i ciasteczek sesji.
- Obsługa transferu fragmentowanego HTTP/1.1 dla odpowiedzi HTTP.
- Utrzymywanie aktywnych połączeń anonimowych w puli w trakcie sesji.
- Funkcje protokołu SSL (Secure Sockets Layer), w tym certyfikaty klienta. Obsługiwane protokoły SSL obejmują następujące elementy: SSL 2.0, SSL 3.0 i Transport Layer Security (TLS) 1.0.
- Obsługa uwierzytelniania serwera i serwera proxy, w tym zintegrowana obsługa usługi Microsoft Passport 1.4 i negocjacja/pakietu protokołu Kerberos.
- Automatyczna obsługa przekierowań, chyba że wyłączono.
- Interfejs skryptowy oprócz interfejsu API.
- Narzędzie do śledzenia ułatwia rozwiązywanie problemów.
Wiele funkcji WinINet nie jest obsługiwanych w usłudze WinHTTP, w tym buforowanie adresów URL i trwałe pliki cookie, autoproxy, autodialing, obsługa offline i protokół FTP.
Aby uzyskać więcej informacji na temat zmian wprowadzonych w wersji 5.1, zobacz Co nowego w systemie WinHTTP 5.1.
Wprowadzenie do usługi WinHTTP
Aby uzyskać więcej informacji na temat winHTTP, zobacz następujące tematy.
- WinINet a WinHTTP porównuje dwie technologie uzyskiwania dostępu do protokołu HTTP.
- WinHTTP Versions opisuje historię wersji WinHTTP.
- Co nowego w programie WinHTTP 5.1 opisuje zmiany i nowe funkcje w programie WinHTTP 5.1.
- terminologia sieciowa opisuje przydatne pojęcia i terminologię dotyczącą sieci w szczególności oraz protokołu HTTP.
- Wybieranie interfejsu WinHTTP opisuje interfejs API języka C/C++ i interfejs COM dla winHTTP.
- Zagadnienia dotyczące zabezpieczeń winHTTP opisuje problemy z zabezpieczeniami, które należy wziąć pod uwagę podczas korzystania z usługi WinHTTP.
- Przenoszenie aplikacji WinINet do WinHTTP opisuje sposób modyfikowania istniejących aplikacji WinINet w celu korzystania z interfejsu API WinHTTP.