Сведения о 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.