Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Как указано в протоколе HTTP (RFC 2616), приложения могут запросить у сервера возврат HTTP-ответов в кодированном формате. До Windows Server 2008 и Windows Vista запросы с кодировкой содержимого были отправлены приложению для обработки на их уровне. Начиная с Windows Server 2008 и Windows Vista, приложение может направлять WinINet для декодирования содержимого для схем кодирования gzip и deflate.
Чтобы включить декодирование содержимого, приложение задает параметр декодирования, запрашивающий, что WinINet выполняет декодирование от их имени. Однако включение декодирования не гарантирует, что WinINet выполнит декодирование содержимого, и приложение должно быть готово к декодирования. WinINet удаляет заголовок кодирования содержимого из ответа при успешном выполнении декодирования содержимого. Приложения должны обрабатывать декодирование содержимого независимо от того, включен или отключен параметр декодирования, если в ответе присутствует заголовок кодирования содержимого.
Если декодирование включено, приложение должно указать список поддерживаемых кодировк в заголовке запроса Accept-Encoding. Однако заголовок Accept-Encoding не обязан серверу отправлять кодированный ответ. WinINet отправляет ответы, которые не соответствуют списку допустимых кодировк обратно в приложение.
В следующем списке описаны условия, при которых WinINet выполнит декодирование содержимого при включении параметра:
- Заголовок Accept-Encoding должен присутствовать в запросе и должен указывать схемы сжатия gzip, deflate или обе.
- Схема кодирования, указанная в заголовке Content-Encoding, должна соответствовать одной из схем кодирования, указанных в заголовке Accept-Encoding.
- Заголовок Content-Encoding в ответе указывает только одну схему кодирования.
- Ответ должен содержать только один заголовок Content-Encoding. WinINet декодирует содержимое, закодированное только одной схемой кодирования.
- Заголовок Cache-Control не должен содержать директиву no-transform.
- Заголовок Content-Range не должен присутствовать в ответе.
Настройка параметра декомпрессии
Параметр декодирования можно задать в дескрипторе сеанса, дескрипторе запроса или дескрипторе подключения. Элемент, на котором задан параметр декодирования, определяет область декодирования. Например, настройка декодирования в сеансе позволит декодировать все подключения и запросы, созданные под этим дескриптором.
Чтобы задать параметр декодирования, приложение вызывает InternetSetOption с дескриптором, возвращенным из InternetOpen, InternetConnectили HttpOpenRequest. Параметр INTERNET_OPTION_HTTP_DECODING указан в параметре dwOption, а параметр lpBuffer указывает на логическую переменную, заданную значение true. Чтобы отключить декодирование, приложение вызывает InternetSetOption с параметром INTERNET_OPTION_HTTP_DECODING и значением булевой переменной, установленным в false.
При установке параметра декодирования WinINet выполняет декодирование по запросу при вызове приложения InternetReadFile. Если WinINet обнаруживает ошибку при декодировании содержимого, вызов InternetReadFile завершается ошибкой с ERROR_INTERNET_DECODING_FAILED. При сбое декодирования приложение имеет два варианта: он может удалить заголовок Accept-Encoding и повторно отправить запрос или задать параметр INTERNET_OPTION_HTTP_DECODING для запроса значение false, а затем повторно отправить запрос. Если для параметра декодирования задано значение false, приложение должно проверить заголовок Content-Encoding и выполнить декодирование на уровне приложения.
Заметка
WinINet не поддерживает реализации сервера. Кроме того, его не следует использовать из какого-либо сервиса. Для реализаций серверов или служб используйте Microsoft Windows HTTP Services (WinHTTP).