You are on page 1of 19

The Benefits and Drawbacks of HTTP Compression

Timothy J. McLaughlin
Department of Computer Science and Engineering
Lehigh University
19 Memorial Drive West
Bethlehem, PA 18015
tjm9@cse.lehigh.edu

Abstract networks. However, one area that seems to have


drawn only a modest amount of attention
HTTP compression addresses some of involves HTTP compression.
the performance problems of the Web by Many Web resources, such as HTML,
attempting to reduce the size of resources JavaScript, CSS and XML documents, are
transferred between a server and client thereby simply ASCII text files. Given the fact that such
conserving bandwidth and reducing user files often contain many repeated sequences of
perceived latency. identical information they are ideal candidates
Currently, most modern browsers and for compression. Other resources, such as JPEG
web servers support some form of content and GIF images and streaming audio and video
compression. Additionally, a number of files, are precompressed and hence would not
browsers are able to perform streaming benefit from further compression. As such,
decompression of gzipped content. Despite this when dealing with HTTP compression, focus is
existing support for HTTP compression, it typically limited to text resources, which stand to
remains an underutilized feature of the Web gain the most byte savings from compression.
today. This can perhaps be explained, in part, by Encoding schemes for such text
the fact that there currently exists little proxy resources must provide lossless data
support for the Vary header, which is necessary compression. As the name implies, a lossless
for a proxy cache to correctly store and handle data compression algorithm is one that can
compressed content. recreate the original data, bit-for-bit, from a
To demonstrate some of the quantitative compressed file [39]. One can easily imagine
benefits of compression, we conducted a test to how the loss or alteration of a single bit in an
determine the potential byte savings for a HTML file could affect its meaning.
number of popular web sites. Our results show The goal of HTTP compression is to
that, on average, 27% byte reductions are reduce the size of certain resources that are
possible for these sites. transferred between a server and client. By
Finally, we provide an in depth look at reducing the size of web resources, compression
the compression features that exist in Microsoft’s can make more efficient use of network
Internet Information Services (IIS) 5.0 and the bandwidth. Compressed content can also
Apache 1.3.22 web server and perform provide monetary savings for those individuals
benchmarking tests on both applications. who pay a fee based on the amount of bandwidth
they consume. More importantly, though, since
1. Introduction fewer bytes are transmitted, clients would
typically receive the resource in less time than if
User perceived latency is one of the it had been sent uncompressed. This is
main performance problems plaguing the World especially true for narrowband clients (that is,
Wide Web today. At one point or another every those users who are connected to the Internet via
Internet user has experienced just how painfully a modem). Modems typically present what is
slow the “World Wide Wait” can be. As a result, referred to as the weakest link or longest mile in
there has been a great deal of research and a data transfer; hence methods to reduce
development focused on improving Web download times are especially pertinent to these
performance. users.
Currently there exist a number of Furthermore, compression can
techniques designed to bring content closer to potentially alleviate some of the burden imposed
the end user in the hopes of conserving by the TCP slow start phase. The TCP slow start
bandwidth and reducing user perceived latency, phase is a means of controlling the amount of
among other things. Such techniques include congestion on a network. It works by forcing a
prefetching, caching and content delivery small initial congestion window on each new
TCP connection thereby limiting the number of perhaps be explained, in part, by the fact that
maximum-size packets that can initially be there currently exists little proxy support for the
transmitted by the sender [2]. Upon the Vary header, as we shall see later, which is
reception of an ACK packet, the sender’s necessary for a proxy cache to correctly store
congestion window is increased. This continues and handle compressed content.
until a packet is lost, at which point the size of
the congestion window is decreased [2]. This 2. Popular Compression Schemes
process of increasing and decreasing the
congestion window continues throughout the Though there exist many different
connection in order to constantly maintain an lossless compression algorithms today, most are
appropriate transmission rate [2]. In this way, a variations of two popular schemes: Huffman
new TCP connection avoids overburdening a encoding and the Lempel-Ziv algorithm.
network with large bursts of data. Due to this Huffman encoding works by assigning a
slow start phase, the first few packets that are binary code to each of the symbols (characters)
transferred on a connection are relatively more in an input stream (file). This is accomplished
expensive than subsequent ones. Also, one can by first building a binary tree of symbols based
imagine that for the transfer of small files, a on their frequency of occurrence in a file. The
connection may not reach its maximum transfer assignment of binary codes to symbols is done in
rate because the transfer may reach completion such a way that the most frequently occurring
before it has the chance to get out of the TCP symbols are assigned the shortest binary codes
slow start phase. So, by compressing a resource, and the least frequently occurring symbols
more data effectively fits into each packet. This assigned the longest codes. This in turn creates a
in turns results in fewer packets being transferred smaller compressed file [15].
thereby lessening the effects of slow start The Lempel–Ziv algorithm, also known
(reducing the number of server stalls) [11, 14, as LZ-77, exploits the redundant nature of data to
35, 6]. provide compression. The algorithm utilizes
In the case where an HTML document what is referred to as a sliding window to keep
is sent in a compressed format, it is probable that track of the last n bytes of data seen. Each time a
the first few packets of data will contain more phrase is encountered that exists in the sliding
HTML code and hence a greater number of window buffer, it is replaced with a pointer to
inline image references than if the same the starting position of the previously occurring
document had been sent uncompressed. As a phrase in the sliding window along with the
result, the client can subsequently issue requests length of the phrase [15].
for these embedded resources quicker hence The main metric for data compression
easing some of the slow start burden. Also, algorithms is the compression ratio, which refers
inline objects are likely to be on the same server to the ratio of the size of the original data to the
as this HTML document. Therefore an size of the compressed data [26]. For example, if
HTTP/1.1 compliant browser may be able to we had a 100 kilobyte file and were able to
pipeline these requests onto the same TCP compress it down to only 20 kilobytes we would
connection [6]. Thus, not only does the client say the compression ratio is 5-to-1, or 80%. The
receive the HTML file in less time he/she is also contents of a file, particularly the redundancy
able to expedite the process of requesting and orderliness of the data, can strongly affect
embedded resources [14, 35]. the compression ratio.
Currently, most modern browsers and
web servers support some form of content 3. Modem Compression
compression. Additionally, a number of
browsers are able to perform streaming Users with low bandwidth and/or high
decompression of gzipped content. This means latency connections to the Internet, such as dial-
that, for instance, such a browser could up modem users, are the most likely to perceive
decompress and parse a gzipped HTML file as the benefits of data compression. Modems
each successive packet of data arrives rather than currently implement compression on their own
having to wait for the entire file to be retrieved however it is not optimal nor is it as effective as
before decompressing. Despite all of the HTTP compression [37]. Most modems
aforementioned benefits and the existing support implement compression at the hardware level,
for HTTP compression, it remains an though it can be built into software that
underutilized feature of the Web today. This can interfaces with the modem. The V.44 protocol,
which is the current modem compression authors concluded that, while the tests showed
standard, uses the Lempel-Ziv-Jeff-Heath that modem compression does work, it is not
(LZJH) algorithm, a variant of LZ-77, to perform nearly as effective as a high level compression
compression [46]. algorithm for reducing transfer time.
The LZJH algorithm works by In [6], a 42 kilobyte HTML file,
constructing a dictionary, represented by a tree, consisting of data combined from the Microsoft
which contains frequently repeated groups of and Netscape home page, was transferred in
characters and strings. For each occurrence of a uncompressed and compressed form over a 28.8
string that appears in the dictionary one need kbps modem. The results showed that using
only output the dictionary index, referred to as high level compression rather than standard
the codeword, rather than each individual modem compression resulted in a 68% reduction
character in the string. When data transfer in the total number of packets transferred and a
begins, the encoder (sender) and decoder 64% reduction in total transfer time.
(receiver) begin building identical dictionary In [47], an experiment was conducted,
trees. Thus, whenever the decoder receives a similar to that of [1], to compare the performance
codeword sent by the encoder, they can use this of modems that support the V.42bis and V.44
as the index into the dictionary tree in order to compression protocols versus that of PKZIP
rebuild the original string [46]. [48], a high-level compression algorithm. The
Modem compression only works over experiment involved measuring the throughput
small blocks of fixed length data, called frames, achieved by several modems in transferring files
rather than on a large chunk of a file as is the of varying type, such as a text file, an
case with high-level algorithms such as gzip. An uncompressed graphics file, and an executable
algorithm constantly monitors the file, via FTP. Each of these files was also
compressibility of these frames to determine compressed using the PKZIP program. The
whether it should send the compressed or results showed the high-level compression
uncompressed version of the frame. Modems program, PKZIP, to be significantly more
can quickly switch between compressed and effective than either of the modem compression
transparent mode through use of a special escape algorithms. Specifically, the performance gain
code [36, 37]. of the V.44 modem over the V.42bis modem was
Furthermore, modems only offer point- approximately 29%. However, the performance
to-point compression. It is only when the data is gain of PKZIP over the V.44 modem was
transferred on the analog line, usually between approximately 94%. Clearly, there was a more
an end user and an Internet Service Provider, that drastic performance difference between PKZIP
the data is compressed. HTTP compression and the V.44 modem compared to that between
would thus generally be considered superior the V.44 and V.42bis modems. Thus, the author
since it provides an end-to-end solution between concluded that while the V.44 modems provided
the origin server and the end user [36]. better performance than the V.42bis modems, the
In [1], Mogul et al. carried out an high-level compression algorithm, PKZIP, was
experiment to compare the performance of a high significantly more effective than modem
level compression algorithm versus that of compression [47].
modem compression. To do this, several
plaintext and gzipped HTML files were 4. HTTP’s Support for Compression
transferred over a 28.8 Kbps modem that
supported the V.42bis compression protocol, HTTP compression has been around
which is a predecessor to the V.44 protocol. The since the day of HTTP/1.0. However, it was not
algorithm used in the V.42bis protocol is similar until the last two years or so that support for this
to that of the V.44 protocol described above; feature was added to most major web browsers
however, it is less efficient in terms of speed and and servers.
memory requirements and usually achieves a
lower compression ratio for an identical resource 4.1 HTTP/1.0
compared to V.44 [37, 46]. The size of the
plaintext documents in the experiment ranged According to [3], in HTTP/1.0 the
from approximately six to 365 kilobytes. Seven manner in which the client and server negotiate
trials were run for each HTML file and the which compression format, if any, to use when
average transfer time in every case was less for transferring a resource is not well defined.
the gzipped file versus the plaintext file. So, the Support for compression exists in HTTP/1.0 by
way of content coding values in the Content- basis, via content-coding values, or on a hop-by-
Encoding and, to an extent, the Accept-Encoding hop basis, via transfer coding values [5]. In
header fields [4]. either case, compression is transparent to the end
The Content-Encoding entity header user.
was included in the HTTP/1.0 specification as a
way for the message sender to indicate what 4.3 Content Coding Values
transformation, if any, had been applied to an
entity and hence what decoding must be The Internet Assigned Numbers
performed by the receiver in order to obtain the Authority (IANA) was designated in HTTP/1.1
original resource. Content-Encoding values as a registry for content-coding value tokens.
apply only to end-to-end encoding [4]. The HTTP/1.1 specification defined the initial
The Accept-Encoding header was tokens to be: deflate, compress, gzip and identity
included as part of the Additional Header Field [5].
Definitions in the appendix of HTTP/1.0. Its The deflate algorithm is based on both
purpose is presumably to restrict the content Huffman coding and LZ-77 compression [43].
coding that the server can apply to a client’s “Compress” was a popular UNIX file
response; however, this header field is explained compression program. It uses the LZW
in a single sentence and there is no specification algorithm, which is covered by patents held by
as to how the server should handle this header UNISYS and IBM [5].
[4]. Gzip is an open source, patent free
compression utility that was designed to replace
4.2 HTTP/1.1 “compress”. Gzip currently uses a variation of
the LZ-77 algorithm by default, though it was
HTTP/1.1 extended support for designed to handle several compression
compression by expanding on the content-coding algorithms [25]. Gzip works by replacing
values and adding transfer-coding values [5]. duplicated patterns with a (distance, length)
Much like in HTTP/1.0, content coding values pointer pair. The distance pointer is limited to
are specified within the Accept-Encoding and the previous 32 kilobytes while the length is
Content-Encoding headers in HTTP/1.1. limited to 258 bytes [10].
The Accept-Encoding header is more The identity token indicates the use of
thoroughly defined in HTTP/1.1 and provides a default encoding, that is, no transformation at all.
way for the client to indicate to the server which
encoding formats it supports. HTTP/1.1 also 5. The Negotiation Process
specifies how the server should handle the
Accept-Encoding field if it is present in a request In order for a client to receive a
[5]. compressed resource from a server via content-
Much like content coding values, coding a negotiation process similar to the
transfer coding values, as defined in HTTP/1.1, following occurs:
provide a way for communicating parties to First, the client (a web browser)
indicate the type of encoding transformation that includes with every HTTP request a header field
can be, or has been, applied to a resource. The indicating its ability to accept compressed
difference being that transfer coding values are a content. The header may look similar to the
property of the message and not of the entity. following: “Accept-Encoding: gzip, deflate”. In
That is, transfer-coding values can be used to this example the client is indicating that it can
indicate the hop-by-hop encoding that has been handle resources compressed in either the gzip or
applied to a message [5]. deflate format. The server, upon receiving the
Transfer coding values are specified in HTTP request, examines the Accept-Encoding
HTTP/1.1 by the TE and Transfer-Encoding field. The server may not support any of the
header fields. The TE request header field indicated encoding formats and would simply
provides a way for the client to specify which send the requested resource uncompressed.
encoding formats it supports. The Transfer- However, in the case where the server can handle
Encoding general-header field indicates what such encoding it then decides if it should
transformation, if any, has been applied to the compress the requested resource based on its
message body [5]. Content-Type or filename extension. In most
To summarize, HTTP/1.1 allows for cases it is up to the site administrator to specify
compression to occur on either an end-to-end which resources the server should compress.
Usually one would only want to compress text
resources, such as HTML and CGI output, as GET / HTTP/1.1
opposed to images, as explained above. For this Accept-Encoding: deflate, gzip, x-gzip, identity,
*;q=0
example we will assume that the server supports Connection: Keep-Alive, TE
gzip encoding and successfully determines that it TE: deflate, gzip, chunked, identity, trailers.
should compress the resource being requested.
The server would include a field similar to Internet Explorer 5.01, 5.5 SP2 and 6.0
“Content-Encoding: gzip” in the reply header all issued the same relevant request information:
and then include the gzipped resource in the
body of the reply message. The client would GET / HTTP/1.1
receive the reply from the server, analyze the Accept-Encoding: gzip, deflate
headers, see that the resource is gzipped and then
perform the necessary decoding in order to Finally, the Netscape 4.78 request
produce the original, uncompressed resource [9]. header contained the following relevant fields:

GET / HTTP/1.0
6. Browser Support for Compression Accept-Encoding: gzip

Support for content coding is inherent Whereas Netscape 6.2.1 issued:


in most of today’s popular web browsers.
Support for content coding has existed in the GET / HTTP/1.1
following browsers since the indicated version: Accept-Encoding: gzip, deflate, compress; q=0.9;
Netscape 4.5+ (including Netscape 6), all
versions of Mozilla, Internet Explorer 4.0+, Notice that gzip is the most common
Opera 4.0+ and Lynx 2.8+ [11, 13]. However, content coding value and, in fact, the only value
there have been reports that Internet Explorer for to appear in the request header of every browser
the Macintosh cannot correctly handle gzip tested. Also, observe that Lynx and Netscape
encoded content [24]. Unfortunately, support for 4.x only support the HTTP/1.0 protocol. For
transfer coding is lacking in most browsers. reasons that will be explained later, some
In order to verify some of these claims compression-enabled servers may choose not to
regarding browser support for content coding a send compressed content to such clients.
test was conducted using a Java program called Finally, note that Opera appears to be the only
BrowserSpy [10]. When executed, this program browser that supports transfer coding as it is the
binds itself to an open port on the user’s only one that includes the TE header with each
machine. The user can then issue HTTP requests HTTP request.
from a web browser to this program. The
program then returns an HTML file to the 7. Client Side Compression Issues
browser indicating the HTTP request headers it
had received from the browser. When receiving compressed data in
For this test we used all of the web either the gzip or deflate format most web
browsers that were accessible to us in order to browsers are capable of performing streaming
see exactly what HTTP request headers these decompression. That is, decompression can be
browsers were sending. The header fields and performed as each successive packet arrives at
values that are of greatest interest include the the client end rather than having to wait for the
HTTP version number and the Accept-Encoding entire resource to be retrieved before performing
and TE field. the decompression [8].
First, Lynx version 2.8.4dev.16 running This is possible in the case of gzip
under Linux sends: because, as was mentioned above, gzip performs
compression by replacing previously
GET / HTTP/1.0 encountered phrases with pointers. Thus, each
Accept-Encoding: gzip, compress successive packet the client receives could only
contain pointers to phrases in the current or
Next, Opera, Netscape and Internet previous packets, not future packets [8].
Explorer were tested under various versions of The CPU time necessary for the client
Windows. to uncompress data is minimal and usually takes
The Opera 5.11 request header only a fraction of the time it does to compress
contained the following relevant fields: the data. Thus the decompression process adds
only a small amount of latency on the client’s changing a single configuration setting in IIS.
end [34, 38]. An IIS server can be configured to compress
A test was conducted to verify that both static and dynamic documents. However,
some of the major web browsers do in fact compression must be applied to the entire server
perform streaming decompression. To begin, a and cannot be activated on a directory-by-
single web page consisting of an extremely large directory basis [30]. IIS has built in support for
amount of text was constructed. Along with the the gzip and deflate compression standards and
text, four embedded images were included. includes a mechanism through which customized
Three of the images were placed near the top of compression filters can be added [30, 29]. Also,
the web page and the fourth at bottom. The web only the Server families of the Windows
page was designed to be as simple as possible operating system have compression capability, as
consisting only of a few basic HTML tags and the Professional family is intended for use as a
image references. The page, which was development platform and not as a production
uploaded to a compression enabled web server, server [28].
ended up containing over 550 kilobytes of text. In IIS, static content is compressed in
Three popular web browsers, Opera two passes. The first time a static document is
5.11, Netscape 4.78 and Internet Explorer 5.01, requested it is sent uncompressed to the client
all running in Windows 2000, were each used to and also added to a compression queue where a
issue an HTTP request for the web page. Using background process will compress the file and
Ethereal [45], a packet-sniffing program, an store it in a temporary directory. Then, on
analysis of the packet log for each of the three subsequent accesses, the compressed file can be
browsers was performed. In all three cases, the retrieved from this temporary directory and sent
browsers, after receiving a few dozen packets to the client [29].
containing the compressed HTML file, issued Dynamic content, on the other hand, is
requests for the first three embedded image files. always compressed on-demand since IIS does
Clearly, these requests were issued well before not cache such content [34].
the entire compressed HTML file had been Thus in IIS the cost of compressing a
transferred hence proving that the major static document is negligible, as this cost is
browsers, running in Windows, do indeed incurred only once for each document. On the
perform streaming decompression for content other hand, since dynamic content is compressed
encoding using gzip. on demand it imposes a slightly greater overhead
on the server [34].
8. Web Server Support for Compression By default, IIS does not send
compressed content to HTTP/1.0 clients.
The analyses in this report focus Additionally, all compressed content is sent by
exclusively on the two most popular web servers, IIS with a header indicating an Expiration date of
namely Apache and IIS. Based on a survey of January 1, 1997. By always setting the
over 38 million web sites, Netcraft [49] reported expiration date in the past, proxies will be forced
that Apache and IIS comprise over 85% of the to validate the object on every request before it
hosts on the World Wide Web as of March 2002. can be served to the client. However, IIS does
Two alternate web servers, Flash [50] and TUX allow the site administrator to set the Max-Age
[51], were also initially considered for inclusion header for dynamic, compressed documents.
in this report, however, based on the information The HTTP/1.1 specification stipulates that the
provided in their respective specification Max-Age header overrides the Expires header,
documents, Flash does not appear to support even if the Expires header is more restrictive [5].
HTTP compression in any form and TUX can As we will see in section 9, this scheme may
only serve static resources that exist as a pre- have been designed intentionally so as to allow
compressed file on the web server. As a result, HTTP/1.1 clients to get a cached version of a
neither program was selected for further analysis. compressed object and at the same time to
prevent HTTP/1.0 clients from getting stale or
8.1 IIS bad content.
Microsoft’s Internet Information
Services (IIS) 5.0 web server provides built in 8.2 Apache
support for compression; however it is not
enabled by default. The process of enabling Apache does not provide a built in
compression is straightforward and involves mechanism for HTTP compression. However,
there is a fairly popular and extensively tested URI [2]. This, of course, proves inadequate
open source module, called mod_gzip, which when multiple versions of the same resource
provides HTTP compression for Apache [27]. exist - in this case, a compressed and
Enabling compression is fairly uncompressed representation.
straightforward, as mod_gzip can either be This problem was addressed in
loaded as an external Apache module or HTTP/1.1 with the inclusion of the Vary
compiled directly into the Apache web server. response header. A cache could then store both a
Since mod_gzip is a standard Apache module, it compressed and uncompressed version of the
runs on any platform supported by the Apache same object and use the Vary header to
server [9]. Much like IIS, mod_gzip uses distinguish between the two. The Vary header is
existing content-coding standards as described in used to indicate which response headers should
HTTP/1.1. Contrary to IIS, mod_gzip allows for be analyzed in order to determine the appropriate
compression to be activated on a per-directory variant of the cached resource to return to the
basis thus giving the website administrator client [2].
greater control over the compression Looking ahead to Figure 11, we can see
functionality for his/her site(s) [10]. Mod_gzip, that IIS already sends the Vary header with its
like IIS, can compress both static and dynamic compressed content. The most recent version of
documents. mod_gzip does not set the Vary header.
In the case of static documents, However, a patch was posted on a mod_gzip
mod_gzip can first check to see if a discussion board [21] in April 2001 that
precompressed version of the file exists and, if it incorporates support for the Vary header into
does, send this version. Otherwise mod_gzip mod_gzip. A message posted in September 2001
will compress the document on-the-fly. In this was posted to another discussion and stated that
way, mod_gzip differs from IIS because mod_gzip had been ported to Apache 2.0 and
mod_gzip can compress a static document on its includes support for the Vary header [22].
first access. Also, mod_gzip can be configured Based on a quick search of the Web, the
to save the compressed files to a temporary latest stable release of Squid [23], version 2.4,
directory. However, if such a directory is not was the only proxy cache that appeared to
specified the static document will simply be support the Vary header. Since such support was
compressed on every access [27]. Mod_gzip is only recently included in Squid it is likely that
purported to support nearly every type of CGI many proxy caches are not running this latest
output, including: Perl, PHP, ColdFusion, version and hence cannot cache negotiated
compiled C code, etc [27]. Both IIS and content. Hence the full potential of HTTP
mod_gzip allow the administrator to specify compression cannot be realized until more
which static and dynamic content should and proxies are able to cache compressed content.
should not be compressed based on the mime
type or file name extension of the resource [7, 10. Related Work
27]. Also, contrary to IIS, mod_gzip by default
sends content to clients regardless of the HTTP In [1], Mogul et al. quantified the
version they support. This can easily be changed potential benefits of delta encoding and data
so that only requests from HTTP/1.1-compliant compression for HTTP by analyzing lives traces
clients can receive compressed content. from Digital Equipment Corporation (DEC) and
an AT&T Research Lab. The traces were
9. Proxy Support for Compression filtered in an attempt to remove requests for
precompressed content; for example, references
Currently one of the main problems to GIF, JPEG and MPEG files. The authors then
with HTTP compression is the lack of proxy estimated the time and byte savings that could
cache support. Many proxies cannot handle the have been achieved had the HTTP responses to
Content-Encoding header and hence simply the clients been delta encoded and/or
forward the response to the client without compressed. The authors determined that in the
caching the resource. As was mentioned above, case of the DEC trace, of the 2465 MB of data
IIS attempts to ensure compressed documents are analyzed, 965 MB, or approximately 39%, could
not served stale by setting the Expires time in the have been saved had the content been gzip
past. compressed. For the AT&T trace, 1054MB, or
Caching was handled in HTTP/1.0 by approximately 17%, of the total 6216 MB of data
storing and retrieving resources based on the could have been saved. Furthermore, retrieval
times could have been reduced 22% and 14% in 11.1 Compression Ratio Measurements
the DEC and AT&T traces, respectively. The
authors remarked that they felt their results The first test that was conducted was
demonstrated a significant potential designed to provide a basic idea of the
improvement in response size and response delay compression ratio that could be achieved by
as a result of delta encoding and compression. compressing some of the more popular sites on
In [8], the authors attempted to the Web. The objective was to determine how
determine the performance benefits of HTTP many fewer bytes would need to be transferred
compression by simulating a realistic workload across the Internet if web pages were sent to the
environment. This was done by setting up a web client in a compressed form. To determine this
server and replicating the CNN site on this we first found a web page, [40], that ranks the
machine. The authors then accessed the Top 99 sites on the Web based on the number of
replicated CNN main page and ten subsections unique visitors. Although the rankings had not
within this page (i.e. World News, Weather, etc), been updated since March 2001 most of the
emptying the cache before each test. Analysis of indicated sites are still fairly popular. Besides,
the total time to load all of these pages showed the intent was not to find a definitive list of the
that when accessing the site on a 28.8 kbps most popular sites but rather to get a general idea
modem, gzip content coding resulted in 30% of some of the more highly visited ones. A
faster page loads. They also experienced 35% freely available program called wget [41] was
faster page loads when using a 14.4 kbps used to retrieve pages from the Web and Perl
modem. scripts were written to parse these files and
Finally, in [6] the authors attempted to extract relevant information.
determine the performance effects of HTTP/1.1. The steps involved in carrying out this
Their tests included an analysis of the benefits of test consisted of first fetching the web page
HTTP compression via the deflate content- containing the list of Top 99 web sites. This
coding. The authors created a test web site that HTML file was then parsed in order to extract all
combined data from the Netscape and Microsoft of the URLs for the Top 99 sites. A pre-existing
home pages into a page called “MicroScape”. CGI program [42] on the Web that allows a user
The HTML for this new page totaled 42 KB with to submit a URL for analysis was then utilized.
42 inline GIF images totaling 125 KB. Three The program determines whether or not the
different network environments were used to indicated site utilizes gzip compression and, if
perform the test: a Local Area Network (high not, how many bytes could have been saved were
bandwidth, low latency), a Wide Area Network the site to implement compression. These byte
(high bandwidth, high latency) and a 28.8 kbps savings are calculated for all 10 levels of gzip
modem (low bandwidth, high latency). The test encoding. Level 0 corresponds to no gzip
involved measuring the time required for the encoding. Level 1 encoding uses the least
client to retrieve the Microscape web page from aggressive form of phrase matching but is also
the server, parse, and, if necessary, decompress the fastest, as it uses the least amount of CPU
the HTML file on-the-fly and retrieve the 42 time when compared to the other levels,
inline images. The results showed significant excluding level 0. Alternatively, level 9
improvements for those clients on low encoding performs the most aggressive form of
bandwidth and/or high latency connections. In pattern matching but also takes the longest,
fact, looking at the results from all of the test utilizing the most CPU resources [26].
environments, compression reduced the total A Perl script was employed to parse the
number of packets transferred by 16% and the HTML file returned by this CGI program, with
download time for the first time retrieval of the all of the relevant information being dumped to a
page by 12%. file that could be easily imported into a
spreadsheet. Unfortunately, the CGI program
11. Experiments can only determine the byte savings for the
HTML file. While this information is useful it
We will now analyze the results from a does not give the user an idea of the compression
number of tests that were performed in order to ratio for the entire page - including the images
determine the potential benefits and drawbacks and other embedded resources. Therefore, we
of HTTP compression. set our web browser to go through a proxy cache
and subsequently retrieved each of the top 99
web pages. We then used the trace log from the
proxy to determine the total size of all of the web Figure 1 shows the difference in the
pages. After filtering out the web sites that could total number of bytes transferred in an
not be handled by the CGI program, wget or Perl uncompressed web page versus those transferred
scripts we were left with 77 URLs. One of the with level 1 and level 9 gzip compression. Note
problems encountered by the CGI program and the small difference in compression ratios
wget involved the handling of server redirection between level 1 and level 9 encoding.
replies. Also, a number of the URLs referenced Table 1 shows a comparison of the total
sites that either no longer existed or were compression ratios for the top ten web sites.
inaccessible at the time the tests were run. You can see that there is only a slight difference
The results of this experiment were in the total compression ratios for levels 1 and 9
encouraging. First, if we consider the savings of gzip encoding. Thus, if a site administrator
for the HTML document alone, the average were to decide to enable gzip compression on a
compression ratio for level 1 gzip encoding turns web server but wanted to devote the least amount
out to be 74% and for level 9 this figure is 78%. of CPU cycles as possible to the compression
This clearly shows that HTML files are prime process, he/she could set the encoding to level 1
candidates for compression. Next, we factor into and still maintain favorable byte savings.
the equation the size of all of the embedded Ultimately, what these results show is
resources for each web page. We will refer to that, on average, a compression-enabled server
this as the total compression ratio and define it as could send approximately 27% less bytes yet still
the ratio of the size of the original page, which transmit the exact same web page to supporting
includes the embedded resources and the clients. Despite this potential savings, out of all
uncompressed HTML, to the size of the encoded of the URLs examined, www.excite.com was the
page, which includes the embedded resources only site that supported gzip content coding. We
and the compressed HTML. believe this is indicative of HTTP compression’s
The results show that the average total current popularity, or lack thereof.
compression ratio comes to about 27% for level
1 encoding and 29% for level 9 encoding. This URL Level 1 Level 9
still represents a significant amount of savings, www.yahoo.com 36.353 38.222
especially in the case where the content is being www.aol.com 26.436 25.697
served to a modem user. www.msn.com 35.465 37.624
www.microsoft.com 38.850 40.189
www.passport.com 25.193 26.544
www.geocities.com 43.316 45.129
www.ebay.com 29.030 30.446
www.lycos.com 40.170 42.058
www.amazon.com 31.334 32.755
www.angelfire.com 34.537 36.427

Table 1 – Comparison of the total compression ratios


of level 1 and level 9 gzip encoding for the indicated
URLs.

11.2 Web Server Performance Test

The next set of tests that were


conducted involved gathering performance
statistics from both the IIS and Apache web
servers.
The test environment consisted of a
client and server PC both with 10 Mbps Ethernet
Network Interface Cards connected together
Figure 1 – The total page size (including HTML directly via a crossover cable. The first
and embedded resources) for the top ten web sites. computer, a Pentium II 266 MHz PC with 128
MB of RAM, was setup as a dual-boot server
running Windows 2000 Server with IIS 5.0 and
Red Hat Linux 7.1 (kernel 2.4.2-2) with Apache
1.3.22 and mod_gzip 1.3.19.1a. Compression These command line options indicate
was enabled for static and dynamic content in that initially requests for the google.html file will
both IIS and Apache. All of the compression be issued at a rate of 10 requests per second.
caching options were disabled for both web Requests will continue at this rate until 1000
servers. The client machine was a Pentium II connections have been made. For these tests
266 MHz PC with 190 MB of RAM running Red each connection makes only one call. In other
Hat Linux 7.1 (kernel 2.4.2-2). words no persistent connections were used. The
Two programs, httperf [12] and rate of requests is then increased by the rate step,
Autobench [20], were used to perform the which is 10. So, now 20 requests will be
benchmarking tests. Httperf actually generates attempted per second until 1000 connections
the HTTP workloads and measures server have been made. This will continue until a rate
performance. Autobench is simply a Perl script of 150 requests per second is attempted.
that acts a wrapper around httperf, automating its Keep in mind when looking at the
execution and extracting and formatting its results that the client may not be capable of
output in such a way that it can easily be issuing 150 requests per second to the server.
imported into a spreadsheet program. Httperf Thus a distinction is made between the desired
was one of the few benchmarking programs that and actual number of requests per second.
fully supports the HTTP/1.1 protocol. Httperf
was helpful for these tests as it allows the 11.2.1 Apache Performance Benchmark
insertion of additional HTTP request header
fields via a command line option. Thus, if an We will first take a look at the results of
httperf user wanted to receive compressed the tests when run against the Apache server.
content they could easily append the “Accept- Figures 2 through 5 represent graphs of some of
Encoding: gzip” header to each HTTP request. the results from respective test cases. Referring
The HTML code from the main page of to the graphs, we can see that for each test case a
four major web sites was downloaded for use in saturation point was reached. This saturation
the next set of tests. The file sizes for these sites: point reflects the maximum numbers of requests
Google [16], Yahoo [17], AOL [18] and eBay the server could handle for the given resource.
[19] were 2528, 20508, 29898, and 50187 bytes Looking at the graphs, the saturation point can
respectively. Thus, the test files were not padded be recognized by the point at which the server’s
with repeated strings in order to improve average response time increases significantly,
compression ratios. Also note that these tests often times jumping from a few milliseconds up
only involved retrieval of the HTML file for to hundreds or thousands of milliseconds. The
each page and not any of the embedded images. response time corresponds to the time between
Since images are not further compressible they when the client sends the first byte of the request
would provide no indication of the performance and receives the first byte of the reply.
effects of compression on a web server. So, if we were to look at Yahoo (Figure
The tests were designed to determine 3), for instance, we would notice that the server
the maximum throughput of the two servers by reaches its saturation point at about the time
issuing a series of requests for compressed and when the client issues 36 requests per second for
uncompressed documents. Using Autobench we uncompressed content. This figure falls slightly,
were able to start by issuing a low rate of to about 33 requests per second, when
requests per second to the server and then compressed content is requested.
increase this rate by a specified step until a high Refer to Table 2 for a comparison of the
rate of requests per second were attempted to be estimated saturation points for each test case.
issued. An example of the command line These estimates were obtained by calculating the
options used to run some of the tests is as average number of connections per second
follows: handled by the server using data available from
the benchmarking results. One interesting thing
./autobench_gzip_on --low_rate 10 -- to note from the graphs is that, aside from the
high_rate 150 --rate_step 10 --
single_host --host1 192.168.0.106 --
Google page, the server maintained almost the
num_conn 1000 --num_call 1 --output_fmt same average reply rate for a page up until the
csv --quiet --timeout 10 --uri1 saturation point, regardless of whether the
/google.html --file google_compr.csv content was being served compressed or
uncompressed.
Figure 2 – Benchmarking results for the retrieval of the Google HTML file from the Apache Server.

Figure 3 – Benchmarking results for the retrieval of the Yahoo HTML file from the Apache Server.
Figure 4 – Benchmarking results for the retrieval of the AOL HTML file from the Apache Server.

Figure 5 – Benchmarking results for the retrieval of the eBay HTML file from the Apache Server.
After the saturation point the numbers especially when compared to the speed of
diverge slightly, as is noticeable in the graphs. today’s average web server.
What this means is that the server was able to
serve almost the same number of requests per Web Site Uncompressed Compressed
second for both compressed and uncompressed Google 3.2 10.2
Yahoo 3.3 27.5
documents. AOL 3.4 34.7
The Google test case shows it is eBay 3.4 51.4
beneficial to impose a limit on the minimum file
size necessary to compress a document. Both Table 3 – Average response time (in milliseconds) for the
mod_gzip and IIS allow the site administrator to Apache server to respond to requests for compressed and
set a lower and upper bound on the size of uncompressed static documents.
compressible resources. Thus if the size of a
resource falls outside of these bounds it will be
11.2.2 IIS Performance Benchmark
sent uncompressed.
For these tests all such bounds were
We attempted to repeat the same tests as
disabled, which caused all resources to be
above using the IIS server. However, our test
compressed regardless of their size.
had to be slightly altered since, unlike mod_gzip
When calculating results we will only
and Apache, IIS does not compress static
look at those cases where the demanded number
documents on the fly. So, to overcome this we
of requests per second is less than or equal to the
simply changed the extension of all of the .html
saturation point. Not surprisingly, compression
files to .asp. Active Server Pages (ASP) are
greatly reduced the network bandwidth required
generated dynamically hence IIS will not cache
for server replies. The factor by which network
them.
bandwidth was reduced roughly corresponds to
Figures 6 through 9 represent graphs of
the compression ratio of the document.
some of the results from each of the respective
test cases. Note from the graphs that, like with
Web Site Uncompressed Compressed Apache, the actual request rate and the average
Google 215 105
Yahoo 36 33 reply rate are identical for the compressed and
AOL 27 25 uncompressed format up until the saturation
EBay 16 15 point. Note also that the average response times
present an interesting value to examine. Recall
Table 2 – Estimated saturation points for the Apache web that with Apache the average reply time was
server based on repeated client requests for the indicated significantly greater when serving compressed
document
content. On the other hand, in IIS, the average
Next we will see the performance response time when serving compressed
effects that on-the-fly compression imposed on dynamic content is the same, and sometimes
the server. To do so we will compare the even a few milliseconds less, than when serving
server’s average response time in serving the uncompressed content. At first we thought this
compressed and uncompressed document. The was happening because the content was
findings are summarized in Table 3. The results somehow being cached even though the IIS
are not particularly surprising. We can see that documentation states that dynamic content is
the size of a static document does not affect never cached [7], so we spent hours searching for
response time when it is requested in an every possible compression and cache setting but
uncompressed form. In the case of to no avail. Finally, we stumbled across what we
compression, however, we can see that as the file believe to be the answer, which is the use of
size of the resource increases so too does the chunked transfer coding. By default IIS does not
average response time. We would certainly chunk the response for an uncompressed
expect to see such results because it takes a document that is dynamically generated via ASP.
slightly longer time to compress larger Figure 10 shows the HTTP response header that
documents. Keep in mind that the time to was generated from the IIS server based on a
compress a document will likely be far smaller client request for an uncompressed ASP
for a faster, more powerful computer. The resource. In this case, IIS generates the entire
machine running as the web server for these tests page dynamically before returning it to the
has a modest amount of computing power, client.
Figure 6 – Benchmarking results for the retrieval of the Google HTML file from the IIS Server.

Figure 7 – Benchmarking results for the retrieval of the Yahoo HTML file from the IIS Server.
Figure 8 – Benchmarking results for the retrieval of the AOL HTML file from the IIS Server.

Figure 9 – Benchmarking results for the retrieval of the eBay HTML file from the IIS Server.
However, as we can see in Figure 11, compressing dynamic content provides
when a client requests an ASP file in compressed significant performance benefits.
form, IIS appears to send the compressed content
to the client in chunks. Thus, the server can 12. Summary / Suggestions
immediately compress and send chunks of data
as they are dynamically generated without So, should a web server use HTTP
having to wait for the entire document to be compression? Well, that’s not such an easy
generated before performing this process [2]. question to answer. There are a number of
Such a process appears to significantly reduce things that must first be considered. For
response time latency. In this way IIS is able to instance, if the server generates a large amount
achieve average response times that are identical of dynamic content one must consider whether
to the response times for uncompressed content. the server can handle the additional processing
costs of on-the-fly compression while still
maintaining acceptable performance. Thus it
HTTP/1.1 200 OK must be determined whether the price of a few
Server: Microsoft-IIS/5.0
Date: Tue, 11 Dec 2001 18:01:09 GMT extra CPU cycles per request is an acceptable
Connection: close trade-off for reduced network bandwidth. Also,
Content-Length: 13506 compression currently comes at the price of
Content-Type: text/html
Set-Cookie:
cacheability, as we saw in section 9.
ASPSESSIONIDGGQQQJHK=EJKABPBDEDGHBPLPLMDP Much Internet content is already
EAHA; path=/ compressed, such as GIF and JPEG images and
Cache-control: private streaming audio and video. However, a large
portion of the Internet is text based and is
Figure 10 – HTTP response header from an IIS Server after a
request for an uncompressed .asp resource
currently being transferred uncompressed. As
we have seen, HTTP compression is an
underutilized feature on the web today. This
HTTP/1.1 200 OK despite the fact that support for compression is
Server: Microsoft-IIS/5.0 built into most modern web browsers and
Date: Tue, 11 Dec 2001 18:01:01 GMT
Connection: close servers. Furthermore, the fact that most
Content-Type: text/html browsers running in the Windows environment
Set-Cookie: perform streaming decompression of gzipped
ASPSESSIONIDGGQQQJHK=DJKABPBDPEAMPJHEBNIH
CBHB; path=/
content is beneficial because a client receiving a
Content-Encoding: gzip compressed HTML file can decompress the file
Transfer-Encoding: chunked as new packets of data arrive rather than having
Expires: Wed, 01 Jan 1997 12:00:00 GMT to wait for the entire object to be retrieved. Our
Cache-Control: private, max-age=86400
Vary: Accept-Encoding tests indicated that 27% byte reductions are
possible for the average web site, proving the
Figure 11 – HTTP response header from an IIS Server after a practicality of HTTP compression. However, in
request for a compressed .asp resource order for HTTP compression to gain popularity a
few things need to occur.
The graphs show that the lines for the First, the design of a new patent free
average response times follow nearly identical algorithm that is tailored specifically towards
paths for the Google, Yahoo! and AOL test case, compressing web documents, such as HTML and
though there is a slight divergence in the AOL CSS, could be helpful. After all, gzip and deflate
test as you near the saturation point. In the eBay are simply general purpose compression schemes
test, however, the server achieves must quicker and do not take into account the content type of
average response times. Again, this can be the input stream. Therefore, an algorithm that,
explained by the server’s use of chunked for instance, has a predefined library of common
transfers. Looking at the graphs we can see that HTML tags could provide a much higher
for the Google, Yahoo! and AOL test cases, the compression ratio than gzip or deflate.
saturation point is roughly equivalent regardless Secondly, we believe expanded support
of whether the content is served in a compressed for compressed transfer coding is essential.
form or not. Currently, support for this feature is scarce in
Based on these results we conclude that most browsers, proxies and servers. Based on
the use of chunked transfer coding for the browser test in Section 6 we can see that as
of Netscape 6.2 and Internet Explorer 6.0,
neither browser fully supports transfer coding. [4] T. Berners-Lee, R. Fielding, and H. Frystyk.
Opera 5 was the only browser tested that Hypertext Transfer Protocol - HTTP/1.0.
indicated its ability to handle transfer coding by RFC 1945, HTTP Working Group, May
issuing a TE header field along with each HTTP 1996. http://www.ietf.org/rfc/rfc1945.txt
request. As far as proxies are concerned, Squid
appears only to support compressed content [5] R. Fielding, J. Gettys, J. Mogul, H. Frystyk,
coding, but not transfer coding, in its current L. Masinter, P. Leach, and T. Berners-Lee.
version. According to the Squid development Hypertext Transfer Protocol -- HTTP/1.1.
project web site [44] a beta version of a patch RFC 2616, HTTP Working Group, June
was developed to extend Squid to handle transfer 1999. http://www.ietf.org/rfc/rfc2616.txt
coding. However, the patch has not been
updated recently and the status of this particular [6] H.F. Nielsen, J. Gettys, A. Baird-Smith, E.
project is listed as idle and in need of developers. Prud'hommeaux, H. W. Lie, and C. Lilley.
Also, in our research we found no evidence of Network Performance Effects of HTTP/1.1,
support for compressed transfer coding in either CSS1, and PNG. In Proceedings of ACM
Apache or IIS. SIGCOMM'97 Conference, September
The most important thing in regards to 1997.
HTTP compression, in our opinion, is the need http://www.w3.org/Protocols/HTTP/Perform
for expanded proxy support. As of now ance/Pipeline.html
compression comes at the price of uncacheability
in most instances. As we saw, outside of the [7] Microsoft Corporation. Microsoft Windows
latest version of Squid, little proxy support exists 2000 Server Documentation.
for the Vary header. So, even though a given http://www.microsoft.com/windows2000/en/
resource may be compressible by a large factor, server/iis/. Feb 28, 2000.
this effectiveness is negated if the server has to
constantly retransmit this compressed document [8] Mozilla. performance: HTTP Compression.
to clients who should have otherwise been http://www.mozilla.org/projects/apache/gzip
served by a proxy cache. /. Sept 15, 1998.
Until these issues can be resolved
HTTP compression will likely continue to be [9] Remote Communications, Inc. RCI’s
overlooked as a way to reduce user perceived mod_gzip FAQ.
latency and improve Web performance. http://www.remotecommunications.com/apa
che/mod_gzip/mod_gzip_faq.htm. 2001.
Acknowledgements
[10] BrowserSpy. The BrowserSpy program.
Thanks are due to Brian D. Davison for http://www.suvi.org/projects/browserspy.
valuable insight and suggestions. html. 2002.

References [11] UnxSoft Ltd. WebSwift: Real Time HTML


Compression.
[1] J. C. Mogul, F. Douglis, A. Feldmann, and B. http://www.unxsoft.com/webswift/. 2001.
Krishnamurthy. Potential Benefits of Delta
Encoding and Data Compression for HTTP. [12] D. Mosberger and T. Jin. httperf: a Tootl
In Proceedings of the ACM SIGCOMM '97 for Measuring Web Server Performance.
Symposium, Cannes, France, Sept 1997. http://www.hpl.hp.com/personal/David_M
osberger/httperf.html. Jun 29, 1998.
[2] B. Krishnamurthy and J. Rexford. Web
Protocols and Practice. Addison-Wesley, [13] P. Cranstone. HTTP Compression Speeds
May 2001. up the Web.
http://www.webreference.com/internet/sof
[3] B. Krishnamurthy, J. Mogul, and D. Kristol. tware/servers/http/compression/. Oct 16,
Key Differences Between HTTP/1.0 and 2000.
HTTP/1.1. In Eighth International World
Wide Web Conference, Toronto, Canada, [14] H.F. Nielsen. The Effect of HTML
May 1999. Compression on a LAN.
http://www.w3.org/Protocols/HTTP/Perfo [28] Microsoft Corp. INFO: HTTP Compression
rmance/Compression/LAN.html. Dec 6, Is Not Available in Internet Information
2000. Services (IIS).
http://support.microsoft.com/default.aspx?
[15] G. Goebel. Introduction / Lossless Data scid=kb;EN-US;q304202. Oct 22, 2001.
Compression.
http://www.vectorsite.net/ttdcmp1.html. [29] Microsoft Corp. Microsoft TechNet: Web
May 01, 2001. Hosting with IIS 5.0.
http://www.microsoft.com/technet/treevie
[16] Google, Inc. The Google Search Engine. w/default.asp?url=/TechNet/prodtechnol/
http://www.google.com/. 2001. windows2000serv/training/w2khost/w2kti
is5.asp. 2000.
[17] Yahoo! The Yahoo! Home Page.
http://www.yahoo.com/. 2001. [30] Microsoft Corp. HTTP Compression
Methods and Files Used by IIS 5.0.
[18] America Online. The America Online http://support.microsoft.com/default.aspx?
Home Page. http://www.aol.com/. 2001. scid=kb;EN-US;q255951. Aug 4, 2000.

[19] eBay. The eBay Home Page. [31] Microsoft Corp. IIS: Enabling HTTP
http://www.ebay.com/. 2001. Compression Returns Content with
January 1, 1997 Expiration Date.
[20] T.J. Midgley. Autobench. http://support.microsoft.com/default.aspx?
http://www.xenoclast.org/autobench/. Jun scid=kb;EN-US;q272596. June 13, 2001.
27, 2001.
[34] Microsoft Corp. About Capacity Planning.
[21] J. Laffey. [Mod_gzip] "Vary" Header. Post http://iishelp.web.cern.ch/IISHelp/iis/htm/
to the [Mod_gzip] message board. core/iiprftn.htm. Feb 28, 2000.
http://lists.over.net/pipermail/mod_gzip/2
001-April/001806.html. April 12, 2001. [35] Packeteer, Inc. Internet Application
Acceleration using Packeteer’s AppCelera
[22] I. Holsman. [PATCH] Add mod_gz to ICX.
httpd-2.0. Post to the [PATCH] message http://www.packeteer.com/PDF_files/app
board. http://www.mail- celera/icx/icx55_paper.pdf. 2001.
archive.com/dev@httpd.apache.org/msg0
0748.html. Sept 1, 2001. [36] Faqs.org. Compression FAQ.
http://www.faqs.org/faqs/compression-
[23] Squid Web Proxy Cache. faq/. Nov 11, 2001.
http://www.squid-cache.org/. Oct 12,
2001. [37] Autosophy. The V.42bis Compression
Standard and Beyond.
[24] S. Young. Making your website super fast- http://www.autosophy.com/v42bisintro.ht
loading. http://www.msxnet.org/fast- m. 2001.
website.html. 2001.
[38] P. Peterlin. Why Compression? Why Gzip?
[25] GNU. The gzip Home Page. http://sizif.mf.uni-lj.si/gzip.html. Nov 18,
http://www.gzip.org/. Nov 5, 2001. 1997.

[26] Gzip manual page. [39] Whatis.com. Lossless Compression


http://www.linuxprinting.org/man/gzip.1. Defintion.
html. 2001. http://whatis.techtarget.com/definition/0,,s
id9_gci214453,00.html. 2001.
[27] Remote Communications, Inc. The
mod_gzip Home Page. [40] Top9.com. Top 99 Web Sites.
http://www.remotecommunications.com/a http://www.top9.com/top99s/top99_web_
pache/mod_gzip/. 2001. sites.html. Mar 2001
[41] GNU Project. The wget home page.
http://www.gnu.org/software/wget/wget.ht
ml. Dec 11, 1999.

[42] Leknor.com. Code – gziped?


http://leknor.com/code/gziped.php. 2001.

[43] A. Feldspar. An Explanation of the Deflate


Algorithm.
http://www.gzip.org/zlib/feldspar.html.
Sept 11, 1997.

[44] S. R. van den Berg. Squid Development


Projects. http://devel.squid-
cache.org/projects.html. Jan 6, 2002.

[45] Ethereal. The Ethereal Network Analyzer.


http://www.ethereal.com/. Jan 21, 2002.

[46] ITU Telecommunication Standardization


Sector (ITU-T) Recommendation V.44.
Data Compression Procedures,
November 2000.

[47] Mitronov, Pavel. Modem Compression:


V.44 Against V.42bis. http://www.digit-
life.com/articles/compressv44vsv42bis/.
2001.

[48] PKWARE, Inc. Home of Genuine PKZIP


Products. http://www.pkware.com/.
2002.

[49] Netcraft. Netcraft Web Server Survey.


http://www.netcraft.com/survey/. March
2002.

[50] V. S. Pai, P. Druschel, and W. Zwaenepoel.


Flash: An Efficient and Portable Web
Server.
http://www.cs.princeton.edu/~vivek/flash
99/. 2002.

[51] Red Hat. TUX Web Server.


http://www.redhat.com/docs/manuals/tux/.
2002.

You might also like