Share via


Codificación de contenido

Como se especifica en el protocolo HTTP (RFC 2616) las aplicaciones pueden solicitar que el servidor devuelva respuestas HTTP en formato codificado. Antes de Windows Server 2008 y Windows Vista, las solicitudes con codificación de contenido se enviaron a la aplicación para su procesamiento en su nivel. A partir de Windows Server 2008 y Windows Vista, la aplicación puede dirigir a WinINet para realizar la descodificación de contenido para los esquemas de codificación de contenido gzip y deflate.

Para habilitar la descodificación de contenido, la aplicación establece la opción de descodificación que solicita que WinINet realice la descodificación en su nombre. Sin embargo, la habilitación de la descodificación no garantiza que WinINet realice la descodificación de contenido y la aplicación debe estar preparada para controlar la descodificación. WinINet quita el encabezado de codificación de contenido de la respuesta cuando se realiza correctamente la descodificación de contenido. Se espera que las aplicaciones controle la descodificación de contenido independientemente de si la opción de descodificación está habilitada o deshabilitada cuando el encabezado de codificación de contenido está presente en la respuesta.

Al habilitar la descodificación, la aplicación debe especificar la lista de codificaciones admitidas en el encabezado Accept-Encoding de la solicitud. Sin embargo, el encabezado Accept-Encoding no obliga al servidor a enviar una respuesta codificada. WinINet enviará respuestas que no coincidan con la lista de codificaciones aceptables de vuelta a la aplicación.

En la lista siguiente se describen las condiciones en las que WinINet realizará la descodificación de contenido cuando la opción esté habilitada:

  • El encabezado Accept-Encoding debe estar presente en la solicitud y debe especificar los esquemas de codificación gzip, deflate o gzip y deflate.
  • El esquema de codificación especificado en el encabezado Content-Encoding debe coincidir con uno de los esquemas de codificación especificados en el encabezado Accept-Encoding.
  • El encabezado Content-Encoding de la respuesta especifica solo un esquema de codificación.
  • La respuesta debe contener solo un encabezado Content- Encoding. WinINet descodifica el contenido codificado solo con un esquema de codificación.
  • El encabezado Cache-Control no debe contener la directiva sin transformación.
  • El encabezado Content-Range no debe estar presente en la respuesta.

Establecer la opción Descompresión

La opción de descodificación se puede establecer en el identificador de sesión, el identificador de solicitud o el identificador de conexión. El identificador en el que se establece la opción de descodificación, define el ámbito de la opción de descodificación. Por ejemplo, al establecer la descodificación en la sesión, se habilitará la descodificación de todas las conexiones y solicitudes creadas en ese identificador.

Para establecer la opción de descodificación, la aplicación llama a InternetSetOption con el identificador devuelto desde InternetOpen, InternetConnect o HttpOpenRequest. La opción INTERNET_OPTION_HTTP_DECODING se especifica en el parámetro dwOption y el parámetro lpBuffer apunta a una variable booleana establecida en true. Para deshabilitar la descodificación, la aplicación llama a InternetSetOption con la opción INTERNET_OPTION_HTTP_DECODING y la variable booleana establecida en false.

Cuando se establece la opción de descodificación, WinINet realiza la descodificación en la solicitud cuando la aplicación llama a InternetReadFile. Si WinINet encuentra un error al realizar la descodificación de contenido, se produce un error en la llamada a InternetReadFile con un ERROR_INTERNET_DECODING_FAILED. Cuando se produce un error en la descodificación, la aplicación tiene dos opciones: puede quitar el encabezado Accept-Encoding y volver a enviar la solicitud, o bien puede establecer la opción INTERNET_OPTION_HTTP_DECODING en la solicitud en false y, a continuación, volver a enviar la solicitud. Si la opción de descodificación está establecida en false, la aplicación debe comprobar el encabezado Content-Encoding y realizar cualquier descodificación en el nivel de aplicación.

Nota

WinINet no admite implementaciones de servidor. Además, no se debe usar desde un servicio. En el caso de las implementaciones de servidor o los servicios, use los servicios HTTP de Microsoft Windows (WinHTTP).