This is a document I created to remind me how to setup HTTP Compression on Win2003 that works. Most of the images and text is my own, but some I got from the Web and if I in breach of any Copyrights please contact me and I will add the appropriate references.
Right Click on the ‘Web Sites’ folder in IIS Manager.

Go to the Service tab. Check the ‘Compress application files’ and ‘Compress static files’ checkboxes.

You can also enable content expiry to improve your YSLOW score, although this is not strictly related to compression. By removing the default Custom Http Header and adding the ‘Etag:’ header YSLOW will remove the requirement for ETags. I have not found this to cause any problems although be warned, I have no idea what the true side effects are or could be.

You also need to add a Web service extension. So select the ‘Web Service Extensions’ folder in IIS Manager and right click in the Right hand panel. Select ‘Add a new Web service extension…”.

Enter a name for the Extension. I used the very creative HTTP Compression. Add the c:\windows\system32\inetsrv\gzip.dll and select the ‘Set extension status to Allowed’ checkbox.

Now it is time to do some MetaBase configuration changes. NOTE: You cannot by default edit the MetaBase.xml file while IIS is running. So either stop IIS or enable direct MetaBase editing.

IIS 6.0 Metabase Configuration - MetaBase.xml
Goto C:\Windows\System32\inetsrv.
Find MetaBase.xml.
Make a Copy.
Open MetaBase.xml in a text editor (like Notepad2, etc…).
Find <IIsCompressionScheme/>
Be careful, there are two sections here: one for deflate and one for gzip. We want gzip so the Location attribute of the element will have the following value:
Location ="/LM/W3SVC/Filters/Compression/gzip"
Look for the HcScriptFileExtensions section. Your default should have: asp, dll, and exe. This is where you add any extensions you want to compress for dynamic files.
Add “aspx”, “asmx”, “css”, “js” and “axd”, but don’t try to save. It won’t work because the file is locked by default if IIS is running.
- HcDoDynamicCompression. Specifies whether dynamic content should be compressed. This is important because dynamic content is by definition always changing, and IIS does not cache compressed versions of dynamic output. Thus, if dynamic compression is enabled, each request for dynamic content causes the content to be compressed. Dynamic compression consumes considerable CPU time and memory resources, and should only be used on servers that have slow network connections, but CPU time to spare.
- HcDoStaticCompression. Specifies whether static content should be compressed.
- HcDoOnDemandCompression: Specifies whether static files, such as .htm and .txt files, are compressed if a compressed version of the file does not exist. If set to True and a file doesn't exist, the user will be sent an uncompressed file while a background thread creates a compressed version for the next request.
- HcDynamicCompressionLevel. VAL(1-10) specifies the compression level for the compression scheme, when the scheme is compressing dynamic content. Low compression levels produce slightly larger compressed files, but with lower overall impact on CPU and memory resources. Higher compression levels generally result in smaller compressed files, but with higher CPU and memory usage.
- HcFileExtensions. Indicates which file name extensions are supported by the compression scheme. Only static files with the specified file extensions are compressed by IIS. If this setting is empty, no static files are compressed.
- HcScriptFileExtensions. Indicates which file name extensions are supported by the compression scheme. The output from dynamic files with the file extensions specified in this property is compressed by IIS.

Shutdown IIS, save the file and restart IIS.
You can test at http://www.pipeboost.com, or using a tool like YSlow.