Новые возможности 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 и прекратила поддержку продукта для версии 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 в наборе ключей также отключен по умолчанию.
- Изменение поведения перенаправления: перенаправления HTTP с безопасного https: URL-адрес на обычный http: URL-адрес больше не следует автоматически по умолчанию по соображениям безопасности. Существует новый параметр, WINHTTP_OPTION_REDIRECT_POLICY, чтобы переопределить поведение перенаправления по умолчанию в WinHTTP 5.1. С помощью компонента COM WinHttpRequest используйте новый параметр WinHttpRequestOption_EnableHttpsToHttpRedirects, чтобы включить перенаправления из https: на http: URL-адреса.
- При создании файла трассировки WinHTTP доступ ограничен доступом к ACL, таким образом, что только администраторы могут читать или записывать файл. Учетная запись пользователя, в которой был создан файл трассировки, также может изменить 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— 64K по умолчанию. Если http-ответ сервера содержит больше 64K общих данных заголовка, WinHTTP завершает запрос ошибкой ERROR_WINHTTP_INVALID_SERVER_RESPONSE . Это ограничение в 64 КБ можно переопределить с помощью нового параметра WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE .
Поддержка IPv6
WinHTTP 5.1 добавляет поддержку протокола Интернета версии 6 (IPv6). WinHTTP может отправлять HTTP-запросы на сервер, DNS-имя которого разрешается в IPv6-адрес, а начиная с Windows Server 2003 и Windows XP с пакетом обновления 2 (SP2), WinHTTP также поддерживает ipPv6-литеральные адреса.
Новые параметры в 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\_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"
Следующие новые варианты WinHttpRequest 5.1 доступны начиная с Windows Server 2003 и Windows XP с пакетом обновления 2 (SP2):
- "WinHttpRequestOption\_MaxAutomaticRedirects" "WinHttpRequestOption\_MaxResponseHeaderSize" "WinHttpRequestOption\_MaxResponseDrainSize" "WinHttpRequestOptions\_EnableHttp1\_1"
Прокси-серверы не являются доверенными, если для безопасности автоматического входа установлено значение High
В WinHTTP 5.0 прокси-серверы всегда являются доверенными для автоматического входа. Это больше не допустимо для WinHTTP 5.1, работающего в Windows Server 2003 и Windows XP с пакетом обновления 2 (SP2) при установке параметра политики WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH.
API автоматического обнаружения веб-прокси (AutoProxy)
Чтобы упростить настройку параметров прокси-сервера для приложений на основе WinHTTP, WinHTTP теперь реализует протокол автоматического обнаружения веб-прокси (WPAD), который также называется автопрокси. Это тот же протокол, который веб-браузеры, такие как Internet Explorer, реализуются для автоматического обнаружения конфигурации прокси-сервера без необходимости указывать прокси-сервер вручную. Для поддержки автопрокси 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, не бесконечное время ожидания DNS, например параметр dwResolveTimeout, утечка потока возникает каждый раз, когда WinHTTP разрешает DNS-имя. При большом количестве HTTP-запросов это приводит к значительной утечке памяти. Обходной путь заключается в том, чтобы оставить параметр времени ожидания для бесконечного разрешения по умолчанию без изменений (значение 0 указывает бесконечное время ожидания). Это настоятельно рекомендуется в любом случае, так как поддержка времени ожидания в разрешениях DNS-имен в WinHTTP является дорогостоящим с точки зрения производительности. Для Windows 2000 и более поздних версий настройка времени ожидания разрешения DNS в WinHTTP не требуется, так как базовая служба DNS-клиента реализует собственное время ожидания разрешения.
- При обработке асинхронных запросов WinHTTP не обрабатывает олицетворение потока должным образом. Это приводит к сбою запросов, требующих проверки подлинности NTLM/Negotiate, если учетные данные явно не предоставляются с помощью функций WinHttpSetCredentials или WinHttpSetOption.