How to use Accept-Encoding HTTP header To recieve compressed Http Response
|
|
|
|
|
If you are seeing this section and do not see source code download links, this means that you are not logged into our site. If you already are a memeber, click on the login link
and login into site and come back to this page for downloading the control files. If you are not a member, click on registration link to
become a Winista member and download the control for free.
A lot of time have seen developers making HTTP web request to a web server without realizing
that there are few HTTP headers that can be utilized to improve the speed of request-response
cycle. One of these HTTP headers is Accept-Encoding.
What this header tells the web server is that the requesting client is capable of recieving response in the encoding
format as specified in the list. Therefore if your server is configured to compress the response before sending it to client
and your client application is programmed to parse the encoded response, then you can use this header to
give a hint to server that you can recieve compressed response in commonly used formats like GZIP, X-ZIP, DEFLATE etc.
This cuts down the amount of response that your client application has to recieve and your application will be
responding much faster to your users or clients whatever the case may be.
In our previous article How to use HttpWebReques I explained
how HttpWebRequest object can be used to send a request to a web server. Now we will build upon that
example to see how Accept-Encoding header can be set.
How to sepcify Accept-Encoding header values?
This is as simple as calling the following line of code.
obRequest.Headers.Add("Accept-Encoding", "gzip");
Second parameter of Add method is command separated list of encodings
that your client application is willing to accept. The server will look at this list and
then check if this list has one more more encoding formats that it implements. And if there is
a match, then the server compresses the response using that encoding and returns to client.
How client checks encoding of response?
After successful completion of GetResponse method on request object, the client
code can check "ContentEncoding" property of request object to see which encoding has
been returned. If server returned the response in gzip encoding then the
value of ContentEncoding property will be set to "gzip".
String strEncoding = obResponse.ContentEncoding;
if (String.Compare("gzip", strEncoding, true) == 0)
{
// Unzip the response stream
}
How to uncompress response?
Till .Net1.1 there was no class or implementation available in framework available to
uncompress the streams. So if you are still using .Net1.1 or earlier then you can use
open source library like SharpLib. For .Net 2.0 framrwork users the good news is that
System.IO.Compression namespace provides classes for compressing and uncompressing
streams. So you can use GZipStream object to uncompress the response stream if
content encoding is set to "gzip". For implementation details download the sample project
included with this article.
|