Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Important
Выбор подходящего HTTP-стека Windows
| Scenario | Рекомендуемый API |
|---|---|
| служба Windows, демон или серверный код | WinHTTP — предназначен для служб; поддерживает олицетворение, изоляцию сеансов |
| Настольное приложение, которому требуются параметры прокси-сервера Internet Options (IE), файлы cookie или запросы на ввод учетных данных | WinINet — автоматически наследует конфигурацию параметров браузера пользователя |
| Современное приложение C++ (UWP или Desktop) | Windows. Web.Http (C++/WinRT) — современная, асинхронная, современная поддержка TLS |
| Приложение .NET | System.Net.Http.HttpClient — управляемые, кроссплатформенные, пуловые подключения |
| Кроссплатформенный C/C++ | libcurl или платформенные HTTP-библиотеки — не зависящие от Windows |
Основные отличия от WinINet: WinHTTP не предоставляет общий доступ к файлам cookie, кэшу или учетным данным в браузере пользователя. Не выводит запросы в пользовательском интерфейсе. Она действительно поддерживает запуск под учетными записями служб и имперсонацию. См. WinINet и WinHTTP для полного сравнения функций.
Заметка
Параметры безопасности по умолчанию — WinHTTP использует конфигурацию Schannel в ОС для согласования версий TLS. Всегда проверяйте сертификаты сервера; никогда не настраивайте WINHTTP_OPTION_SECURITY_FLAGS на игнорирование ошибок сертификата в промышленной среде. Сведения о конфигурации TLS см. в разделе "Вопросы безопасности WinHTTP".
Заметка
Для контейнеров приложений и системных служб с Windows 10 версии 1709, HTTP/2 (см. RFC7540) включен по умолчанию.
Службы HTTP Microsoft Windows (WinHTTP) предоставляют поддерживаемый сервером высокоуровневый интерфейс для протоколов HTTP/2 и 1.1. WinHTTP предназначен для использования в основном в сценариях на основе сервера серверными приложениями, которые взаимодействуют с HTTP-серверами.
WinINet была разработана в качестве клиентской платформы HTTP для интерактивных настольных приложений. WinINet отображает пользовательский интерфейс для некоторых операций, таких как сбор учетных данных пользователя. Однако WinHTTP обрабатывает эти операции программным способом. Серверные приложения, требующие http-клиентских служб, должны использовать WinHTTP вместо WinINet. Дополнительные сведения см. в статье Перенос приложений WinINet в WinHTTP.
WinHTTP также предназначен для использования в системных службах и клиентских приложениях на основе HTTP. Однако однопользовательские приложения, требующие функциональных возможностей протокола FTP, сохраняемости файлов cookie, кэширования, автоматической обработки учетных данных, совместимости Internet Explorer или поддержки платформы нижнего уровня следует рассмотреть возможность использования WinINet.
Этот интерфейс доступен из C/C++ с помощью API интерфейса программирования приложений WinHTTP или с помощью интерфейсов IWinHttpRequest и IWinHttpRequestEvents. WinHTTP также доступен из скрипта и Microsoft Visual Basic через объект WinHTTP. Дополнительные сведения и описания отдельных функций см. в справочнике по функциям WinHTTP для конкретного языка.
Начиная с Windows 8, WinHTTP предоставляет API для подключения с использованием протокола WebSocket , таких как WinHttpWebSocketSend и WinHttpWebSocketReceive.
Осторожность
WinHTTP не является реентерантным, за исключением во время асинхронного завершения вызова. То есть в то время как поток имеет вызов, ожидающий одного из функций WinHTTP, таких как WinHttpSendRequest, WinHttpReceiveResponse, WinHttpQueryDataAvailable, WinHttpSendData или WinHttpWriteData, он никогда не должен вызывать WinHTTP во второй раз до завершения первого вызова. Один из сценариев, при котором может произойти второй вызов, выглядит следующим образом: если приложение ставит в очередь вызов асинхронной процедуры (APC) в поток, который вызывает WinHTTP, и если WinHTTP выполняет внутри системы ожидание с возможностью оповещения, APC может выполняться. Если подпрограмма APC также вызывает WinHTTP, она повторно входит в API WinHTTP, и внутреннее состояние WinHTTP может быть повреждено.
Функции WinHTTP 5.1
Следующие функции были добавлены в версию 5.1 WinHTTP:
- Поддержка IPv6.
- Возможности AutoProxy.
- Протокол HTTP/1.0, включая поддержку удержания соединения в открытом состоянии и сеансовых cookie.
- Поддержка фрагментированного переноса HTTP/1.1 для http-ответов.
- Поддержание пула анонимных подключений между сеансами.
- Функциональность Secure Sockets Layer (SSL), включая клиентские сертификаты. Поддерживаемые протоколы SSL включают следующие: SSL 2.0, SSL 3.0 и TLS 1.0.
- Поддержка проверки подлинности сервера и прокси-сервера, включая встроенную поддержку Microsoft Passport 1.4 и пакета Negotiate/ Kerberos.
- Автоматическая обработка перенаправлений, если это не отключено.
- Скриптируемый интерфейс в дополнение к API.
- Утилита трассировки для помощи в устранении неполадок.
Ряд функций WinINet не поддерживаются в WinHTTP, включая кэширование URL-адресов и постоянные файлы cookie, автопрокси, автодиалинг, автономную поддержку и протокол ПЕРЕДАЧи файлов (FTP).
Дополнительные сведения об изменениях, представленных в версии 5.1, см. в разделе Что нового в WinHTTP 5.1.
Начало работы с WinHTTP
Дополнительные сведения о WinHTTP см. в следующих разделах.
- WinINet и WinHTTP сравнивает две технологии для доступа к HTTP.
- "Версии WinHTTP" описывает историю версий WinHTTP.
- Новые возможности WinHTTP 5.1 описывают изменения и новые функции в WinHTTP 5.1.
- терминология сети описывает полезные понятия и терминологию, связанные с сетями в целом и протоколом HTTP, в частности.
- выбор интерфейса WinHTTP описывает API C/C++ и COM-интерфейс для WinHTTP.
- Соображения безопасности WinHTTP описывают проблемы безопасности, которые следует учитывать при использовании WinHTTP.
- перенос приложений WinINet в WinHTTP описывает, как изменить существующие приложения WinINet для использования API WinHTTP.