Innehållskodning
Enligt vad som anges i HTTP-protokollet (RFC 2616) kan program begära att servern returnerar HTTP-svar i kodat format. Före Windows Server 2008 och Windows Vista skickades begäranden med innehållskodning till programmet för bearbetning på deras nivå. Från och med Windows Server 2008 och Windows Vista kan programmet dirigera WinINet till att utföra innehållsdekodning för gzip- och deflate-innehållskodningsscheman.
För att aktivera innehållsdekodning anger programmet avkodningsalternativet som begär att WinINet ska utföra avkodning för deras räkning. Aktivering av avkodning garanterar dock inte att WinINet utför innehållsdekodning, och programmet bör vara förberett för att hantera avkodning. WinINet tar bort innehållskodningshuvudet från svaret när innehållsdekodning har utförts. Program förväntas hantera innehållsdekodning oavsett om avkodningsalternativet är aktiverat eller inaktiverat när innehållskodningshuvudet finns i svaret.
När avkodning är aktiverat måste programmet ange listan över kodningar som stöds i Accept-Encoding huvudet för begäran. Accept-Encoding-huvudet tvingar dock inte servern att skicka ett kodat svar. WinINet skickar svar som inte matchar listan över godkända kodningar tillbaka till programmet.
I följande lista beskrivs de villkor under vilka WinINet ska utföra innehållsdekodning när alternativet är aktiverat:
- Accept-Encoding-huvudet måste finnas i begäran, och det måste ange gzip, deflate eller både gzip och deflate som kodningsscheman.
- Kodningsschemat som anges i rubriken Content-Encoding måste matcha något av kodningsschemana som anges i Accept-Encoding-huvudet.
- Innehållskodningshuvudet i svaret anger endast ett kodningsschema.
- Svaret får bara innehålla ett Content- Encoding-huvud. WinINet avkodar innehåll som är kodat med endast ett kodningsschema.
- Rubrik Cache-Control får inte innehålla no-transform-direktivet.
- Innehållsintervallrubriken får inte finnas i svaret.
Ställ in dekomprimeringsalternativet
Avkodningsalternativet kan anges på sessionshandtaget, begärandehandtaget eller anslutningshandtaget. Handtaget som avkodningsalternativet är inställt på definierar omfånget för avkodningsalternativet. Om du till exempel anger avkodning för sessionen kan du avkoda alla anslutningar och begäranden som skapats under handtaget.
Om du vill ange avkodningsalternativet anropar programmet InternetSetOption med handtaget som returneras från InternetOpen, InternetConnecteller HttpOpenRequest. Alternativet INTERNET_OPTION_HTTP_DECODING anges i parametern dwOption och parametern lpBuffer pekar på en boolesk variabel inställd på true. För att inaktivera avkodning anropar programmet InternetSetOption med alternativet INTERNET_OPTION_HTTP_DECODING och den booleska variabeln inställd på false.
När avkodningsalternativet har angetts avkodar WinINet begäran när programmet anropar InternetReadFile. Om WinINet stöter på ett fel vid avkodning av innehåll misslyckas anropet till InternetReadFile med en ERROR_INTERNET_DECODING_FAILED. När avkodningen misslyckas har programmet två alternativ: det kan ta bort Accept-Encoding-huvudet och skicka begäran igen, eller ange alternativet INTERNET_OPTION_HTTP_DECODING på begäran till false och sedan skicka begäran igen. Om avkodningsalternativet är inställt på false måste programmet kontrollera rubriken Content-Encoding och utföra eventuell avkodning på programnivå.
Notis
WinINet stöder inte serverimplementeringar. Dessutom bör det inte användas i samband med en tjänst. För serverimplementeringar eller tjänster använder du Microsoft Windows HTTP Services (WinHTTP).