Inhoudscodering
Zoals gespecificeerd in het HTTP-protocol (RFC 2616), kunnen applicaties aanvragen dat de server HTTP-antwoorden retourneert in gecodeerd formaat. Vóór Windows Server 2008 en Windows Vista werden aanvragen met inhoudscodering naar de toepassing verzonden voor verwerking op hun niveau. Vanaf Windows Server 2008 en Windows Vista kan de toepassing WinINet omleiden om inhoudscodering uit te voeren voor de gzip- en deflate inhoudscoderingsschema's.
Als u inhoudscodering wilt inschakelen, stelt de toepassing de coderingsoptie in die vraagt dat WinINet namens hen decodering uitvoert. Het inschakelen van decodering garandeert echter niet dat WinINet inhoudsdecodering uitvoert en dat de toepassing moet worden voorbereid om decodering te verwerken. WinINet stript de header voor inhoudscodering uit het antwoord wanneer inhoudscodering is uitgevoerd. Van toepassingen wordt verwacht dat inhoudsdecodering wordt verwerkt, ongeacht of de decoderingsoptie is ingeschakeld of uitgeschakeld wanneer de header voor inhoudscodering aanwezig is in het antwoord.
Wanneer ontsleuteling is ingeschakeld, moet de toepassing de lijst met ondersteunde coderingen opgeven in de Accept-Encoding header van de aanvraag. De Accept-Encoding-header verplicht de server echter niet om een gecodeerd antwoord te verzenden. WinINet verzendt antwoorden die niet overeenkomen met de lijst met acceptabele coderingen naar de toepassing.
In de volgende lijst worden de voorwaarden beschreven waaronder WinINet inhoudscodering uitvoert wanneer de optie is ingeschakeld:
- De Accept-Encoding header moet aanwezig zijn in de aanvraag en moet de gzip-, deflate of zowel gzip- als deflate coderingsschema's opgeven.
- Het coderingsschema dat is opgegeven in de header Inhoudscodering moet overeenkomen met een van de coderingsschema's die zijn opgegeven in de Accept-Encoding-header.
- De header Content-Encoding in het antwoord geeft slechts één coderingsschema op.
- Het antwoord mag slechts één inhoudscoderingsheader bevatten. WinINet decodeert inhoud die is gecodeerd met slechts één coderingsschema.
- De Cache-Control-header mag niet de directieve no-transform bevatten.
- De Content-Range header mag niet aanwezig zijn in de reactie.
De decompressieoptie instellen
De decoderingsoptie kan worden ingesteld op de sessie-handle, de verzoek-handle of de verbinding-handle. De ingang waarop de decoderingsoptie is ingesteld, definieert het bereik van de decoderingsoptie. Als u bijvoorbeeld decodering voor de sessie instelt, wordt het decoderen van alle verbindingen en aanvragen die onder die ingang zijn gemaakt, ingeschakeld.
Als u de decoderingsoptie wilt instellen, roept de toepassing InternetSetOption- aan met de ingang die wordt geretourneerd door InternetOpen, InternetConnectof HttpOpenRequest-. De optie INTERNET_OPTION_HTTP_DECODING is opgegeven in de parameter dwOption en de parameter lpBuffer verwijst naar een booleaanse variabele die is ingesteld op waar. Als u decodering wilt uitschakelen, roept de toepassing InternetSetOption- aan met de optie INTERNET_OPTION_HTTP_DECODING en de booleaanse variabele ingesteld op false.
Wanneer de decoderingsoptie is ingesteld, voert WinINet decodering uit op de aanvraag wanneer de toepassing InternetReadFileaanroept. Als WinINet een fout tegenkomt tijdens het decoderen van inhoud, mislukt de aanroep naar InternetReadFile- met een ERROR_INTERNET_DECODING_FAILED. Als het decoderen mislukt, heeft de toepassing twee opties: de Accept-Encoding header verwijderen en de aanvraag opnieuw verzenden, of de INTERNET_OPTION_HTTP_DECODING optie voor de aanvraag instellen op false en vervolgens de aanvraag opnieuw verzenden. Als de decoderingsoptie is ingesteld op false, moet de toepassing de header Content-Encoding controleren en eventuele decodering op toepassingsniveau uitvoeren.
Notitie
WinINet biedt geen ondersteuning voor serverimplementaties. Daarnaast mag deze niet worden gebruikt vanuit een service. Voor server-implementaties of -services wordt Microsoft Windows HTTP Services (WinHTTP)gebruikt.