Новые возможности 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. Если вызов функции завершается асинхронно, 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 с безопасного 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-ответе максимальный объем данных заголовка 64 килобайта. Если 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 с пакетом обновления 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"
Следующие новые варианты 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 Professional с пакетом обновления 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.