Новые возможности WinHTTP 5.1

В этом разделе описываются наиболее важные различия между WinHTTP версии 5.1 и версии 5.0. Многие из этих различий требуют изменения кода в приложениях, которые переносятся с версии 5.0 на версию 5.1. Некоторые функции в версии 5.1 доступны только начиная с Windows Server 2003 и Windows XP с пакетом обновления 2 (SP2), в частности функции, связанные с повышением безопасности клиента от вредоносных веб-серверов.

Важно!

С выпуском WinHTTP версии 5.1 скачиваемая версия WinHTTP 5.0 больше не доступна. С 1 октября 2004 г. корпорация Майкрософт удалила скачанный пакет SDK winHTTP 5.0 с сайта MSDN и прекратила поддержку продукта для версии 5.0.

 

Изменение имени БИБЛИОТЕКи DLL

Имя новой библиотеки DLL WinHTTP 5.1 — Winhttp.dll, тогда как имя библиотеки DLL WinHTTP 5.0 — Winhttp5.dll.

WinHTTP 5.0 и 5.1 могут сосуществовать в одной системе; WinHTTP 5.1 не заменяет и не устанавливает WinHTTP 5.0.

Повторное распространение

WinHTTP 5.1 доступен только в Windows Server 2003, Windows 2000 Профессиональная с пакетом обновления 3 (SP3), Windows XP с пакетом обновления 1 (SP1) и более поздних версиях. Распространяемый msm-файл модуля слияния недоступен для WinHTTP 5.1.

WinHttpRequest ProgID

Идентификатор ProgID компонента WinHttpRequest изменен с "WinHttp.WinHttpRequest.5" на "WinHttp.WinHttpRequest.5.1". ClSID класса WinHttpRequest также изменился.

Изменение поведения асинхронного обратного вызова

При вызове функций WinHttpWriteData, WinHttpQueryDataAvailable и WinHttpReadData в асинхронном режиме не следует полагаться на соответствующие параметры lpdwNumberOfBytesWritten, lpdwNumberOfBytesAvailable и lpdwNumberOfBytesRead OUT . Если вызов функции завершается асинхронно, WinHTTP не выполняет запись в эти указатели, предоставляемые кодом приложения. Вместо этого приложение должно получить эти значения с помощью параметров lpvStatusInformation и dwStatusInformationLength в функцию обратного вызова.

Изменения параметров по умолчанию

Изменения параметров по умолчанию включают:

  • Проверка ssl-сертификата сервера включена по умолчанию в WinHTTP 5.1. WinHTTP 5.0 не обрабатывает ошибки, возникающие при проверке сертификата сервера, как неустранимые ошибки; Они передаются приложению с помощью уведомления SECURE_FAILURE обратного вызова, но не вызывают прерывания запроса. Кроме того, WinHTTP 5.1 обрабатывает сбои проверки сертификатов сервера как неустранимые ошибки, прекращающие запрос. Приложение может указать WinHTTP игнорировать небольшое подмножество ошибок сертификата, таких как неизвестный ЦС, недопустимая или просроченная дата сертификата или недопустимое имя субъекта сертификата, используя параметр WINHTTP_OPTION_SECURITY_FLAGS .
  • Поддержка проверки подлинности passport отключена по умолчанию в WinHTTP 5.1. Поддержку паспортов можно включить с помощью параметра WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH . Автоматический поиск учетных данных passport в keyring также отключен по умолчанию.
  • Изменение поведения перенаправления. Http-перенаправления с защищенного URL-адреса https: на обычный URL-адрес HTTP: больше не следуют автоматически по умолчанию по соображениям безопасности. Существует новый параметр, WINHTTP_OPTION_REDIRECT_POLICY, чтобы переопределить поведение перенаправления по умолчанию в WinHTTP 5.1. В компоненте COM WinHttpRequest используйте новый параметр WinHttpRequestOption_EnableHttpsToHttpRedirects , чтобы включить перенаправление с https: на URL-адреса http: .
  • При создании файла трассировки WinHTTP доступ ограничивается ACL, чтобы только администраторы могли читать или записывать файл. Учетная запись пользователя, под которой был создан файл трассировки, также может изменить список управления доступом, чтобы предоставить доступ другим пользователям. Эта защита доступна только в файловой системе, поддерживающей безопасность; то есть NTFS, а не FAT32).
  • Начиная с Windows Server 2003 и Windows XP с пакетом обновления 2 (SP2), отправка запросов на следующие хорошо известные порты, отличные от HTTP, ограничена из соображений безопасности: 21 (FTP), 25 (SMTP), 70 (GOPHER), 110 (POP3), 119 (NNTP), 143 (IMAP).
  • Начиная с Windows Server 2003 и Windows XP с пакетом обновления 2 (SP2), максимальный объем данных заголовка, принимаемых WinHTTP в HTTP-ответе, по умолчанию составляет 64 КБ. Если HTTP-ответ сервера содержит более 64 КБ общих данных заголовка, WinHTTP завершает запрос с ошибкой ERROR_WINHTTP_INVALID_SERVER_RESPONSE . Это ограничение в 64 КБ можно переопределить с помощью нового параметра WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE .

Поддержка IPv6

WinHTTP 5.1 добавляет поддержку протокола IPv6. WinHTTP может отправлять HTTP-запросы на сервер, DNS-имя которого разрешается в IPv6-адрес. Начиная с Windows Server 2003 и Windows XP с пакетом обновления 2 (SP2), WinHTTP также поддерживает литеральные адреса IPv6.

Новые параметры в API C/C++ для WinHTTP

WinHTTP 5.1 реализует следующие новые параметры:

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

Начиная с Windows Server 2003 и Windows XP с пакетом обновления 2 (SP2), WinHTTP 5.1 реализует следующие новые параметры. Однако в Windows 2000 Professional с пакетом обновления 3 (SP3) или Windows XP с пакетом обновления 1 (SP1) вызовы WinHttpSetOption или WinHttpQueryOption со следующими идентификаторами параметров завершаются ошибкой:

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

Новые параметры в компоненте WinHttpRequest 5.1

Компонент WinHttpRequest 5.1 реализует следующие новые параметры:

"WinHttpRequestOption\_RevertImpersonationOverSsl" "WinHttpRequestOption\_EnableHttpsToHttpRedirects" "WinHttpRequestOption\_EnablePassportAuthentication"

Начиная с Windows Server 2003 и Windows XP с пакетом обновления 2 (SP2) доступны следующие новые параметры WinHttpRequest 5.1:

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

Прокси-серверы не являются доверенными, если для параметра "Безопасность автоматического входа" задано значение "Высокий"

В WinHTTP 5.0 прокси-серверы всегда являются доверенными для автоматического входа. Этот параметр больше недействителен для WinHTTP 5.1, работающего в Windows Server 2003 и Windows XP с пакетом обновления 2 (SP2), если задан параметр политики WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH .

API автоматического обнаружения веб-прокси (AutoProxy)

Чтобы упростить настройку параметров прокси-сервера для приложений на основе WinHTTP, WinHTTP теперь реализует протокол автоматического обнаружения веб-прокси (WPAD), также называемый автопрокси. Это тот же протокол, который веб-браузеры, такие как интернет-Обозреватель, реализуют для автоматического обнаружения конфигурации прокси-сервера без необходимости указывать прокси-сервер вручную. Для поддержки автопрокси WinHTTP 5.1 реализует новую функцию C/C++ WinHttpGetProxyForUrl, а также две вспомогательные функции: WinHttpDetectAutoProxyConfigUrl и WinHttpGetIEProxyConfigForCurrentUser.

Известные проблемы

Известны следующие проблемы в WinHTTP 5.1 в Windows 2000 Профессиональная с пакетом обновления 3 (SP3) и Windows XP с пакетом обновления 1 (SP1). Эти проблемы устранены для WinHTTP, начиная с Windows Server 2003 и Windows XP с пакетом обновления 2 (SP2):

  • Если приложение использует функцию WinHttpSetTimeouts или метод SetTimeouts в компоненте WinHttpRequest , чтобы задать не бесконечное время ожидания разрешения DNS, например параметр dwResolveTimeout , утечка дескриптора потока происходит каждый раз, когда WinHTTP разрешает DNS-имя. При большом количестве HTTP-запросов это приводит к значительной утечке памяти. Обходной путь — оставить значение времени ожидания бесконечного разрешения по умолчанию без изменений (значение 0 указывает бесконечное время ожидания). Это настоятельно рекомендуется в любом случае, так как поддержка времени ожидания при разрешении DNS-имен в WinHTTP требует больших затрат с точки зрения производительности. Для Windows 2000 и более поздних версий установка времени ожидания разрешения DNS в WinHTTP не требуется, так как базовая служба DNS-клиента реализует собственное время ожидания разрешения.
  • При обработке асинхронных запросов WinHTTP не обрабатывает олицетворение потока должным образом. Это приводит к сбою запросов, требующих проверки подлинности NTLM/Negotiate, если учетные данные явно не предоставлены с помощью функций WinHttpSetCredentials или WinHttpSetOption .