Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GZip Compression On IIS 7.5 is not working

I am trying to support GZip compression for my static files under IIS (which should be enabled by default but not) but not working so far. Here is the the section under <system.webServer> node inside the web.config file of the web app;

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">   <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" />   <dynamicTypes>     <add mimeType="text/*" enabled="true" />     <add mimeType="message/*" enabled="true" />     <add mimeType="application/x-javascript" enabled="true" />     <add mimeType="application/json" enabled="true" />     <add mimeType="*/*" enabled="false" />   </dynamicTypes>   <staticTypes>     <add mimeType="text/*" enabled="true" />     <add mimeType="message/*" enabled="true" />     <add mimeType="application/x-javascript" enabled="true" />     <add mimeType="application/atom+xml" enabled="true" />     <add mimeType="application/xaml+xml" enabled="true" />     <add mimeType="*/*" enabled="false" />   </staticTypes> </httpCompression>  <urlCompression doStaticCompression="true" /> 

I tried it with Google Chrome. Here are the Request Headers;

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3

Accept-Encoding:gzip,deflate,sdch

Accept-Language:en-US,en;q=0.8

Cache-Control:no-cache

Connection:keep-alive

Host:my-website-url

Pragma:no-cache

User-Agent:Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30

These are the Response Headers;

Accept-Ranges:bytes

Content-Length:232651

Content-Type:application/x-javascript

Date:Thu, 04 Aug 2011 08:58:19 GMT

ETag:"a69135734a50cc1:0"

Last-Modified:Mon, 01 Aug 2011 12:56:37 GMT

Server:Microsoft-IIS/7.5

X-Powered-By:ASP.NET

I check the applicationHost.config file and found some nodes like below;

----  <section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />  ----  <section name="urlCompression" overrideModeDefault="Allow" />  ----  <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">     <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />     <staticTypes>         <add mimeType="text/*" enabled="true" />         <add mimeType="message/*" enabled="true" />         <add mimeType="application/x-javascript" enabled="true" />         <add mimeType="application/atom+xml" enabled="true" />         <add mimeType="application/xaml+xml" enabled="true" />         <add mimeType="*/*" enabled="false" />     </staticTypes> </httpCompression>  ----  <urlCompression /> 

What am I missing here?

like image 688
tugberk Avatar asked Aug 04 '11 09:08

tugberk


People also ask

How do I enable gzip compression IIS?

GZip Compression can be enabled directly through IIS. So we go to the “Turn Windows features on or off” and select “Dynamic Content Compression” and click the OK button. Now if we go back to IIS, we should see that the compression page has changed.

How do you check gzip compression is enabled or not?

Double click on the file and select headers. Under 'Response headers' you are looking for the 'Connection-Encoding' field, it will say gzip if it is enabled.

How do I enable gzip compression?

It's also one of the two recommended web servers by WordPress. To enable GZIP compression on Apache servers, you need to use its mod_filter and mod_deflate modules and configure them properly with the right directives. They will direct Apache to compress server output before sending it to clients over the network.

Do any browsers not support gzip?

All modern browsers can handle a gzip encoded response. In fact, if you look at their requests, they'll have a header that says something along the lines of Accept-Encoding: gzip which is their way of saying to the server that they can handle gzipped responses.


1 Answers

After a lot of searching, I finally found what got compression working on my IIS 7.5. To start with, IIS will not compress a file unless it loaded often enough. That brings up the question "what does IIS consider often enough?" Well, the defaults are 2 times every 10 seconds. Yikes!

This setting can be changed in web.config, but the section needs to be unlocked first in applicationHost.config. Here are the commands:

First unlock the section:

C:\Windows\System32\inetsrv\appcmd.exe unlock config /section:system.webServer/serverRuntime

Unlocked section "system.webServer/serverRuntime" at configuration path "MACHINE/WEBROOT/APPHOST".

Now that is done, edit the web.config file and add the serverRuntime element:

<?xml version="1.0" encoding="UTF-8"?>
  <configuration>
    <system.webServer>
      <serverRuntime frequentHitThreshold="1" frequentHitTimePeriod="10:00:00" />
...

In this case, I set it to hit the file once in a 10 hour period. You can adjust the values as necessary. Here is the document that explains the serverRuntime element:

http://www.iis.net/configreference/system.webserver/serverruntime

I hope this helps get your compression working as well.

Note: you can also set the serverRuntime element up in the applicationHost.config file, but I chose to change it in the web.config because we have a number of servers and farms with various sites, and it is easier for me to control it from this level of granularity.

like image 107
Brain2000 Avatar answered Sep 22 '22 03:09

Brain2000