MVC4 bundling GZIP and headers

asp.net-mvc-4, asp.net-optimization, gzip

Solution

To properly get the JavaScript files on IIS compressed and served with GZip encoding put the following in your web.config.

 <staticContent>

      <remove fileExtension=".js" />
      <mimeMap fileExtension=".js" mimeType="text/javascript" />

      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
    </staticContent>

    <urlCompression doDynamicCompression="true" dynamicCompressionBeforeCache="true" />
    <httpCompression noCompressionForHttp10="false" noCompressionForProxies="false" dynamicCompressionDisableCpuUsage="93" dynamicCompressionEnableCpuUsage="93" staticCompressionDisableCpuUsage="99" staticCompressionEnableCpuUsage="99">
      <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="4" />
    </httpCompression>
</system.webServer>

And then on your ISS in MIME Types

change the application/x-javascript to text/javascript

You will now see in DevTools that JS files are being served with gzip in Content Encoding column.

Problem

I'm testing my site with Google PageSpeed and YSlow and the bundles that i've created with MVC4 bundles aren't getting Gzipped (Compressing resources with gzip or deflate can reduce the number of bytes sent over the network) and there is no Vary: Accept-Encoding header (Instructs proxy servers to cache two versions of the resource: one compressed, and one uncompressed. This helps avoid issues with public proxies that do not detect the presence of a Content-Encoding header properly.) And also how can i add encoding header for the whole scripts folder on the ISS. I know there is HTTP Response Headers, then Add Custom HTTP Response Header, but will this work on the whole scripts folders and subfolders and what to put in the Name and Value fields. How can this be solved. Regards.

Original source