Search code examples
asp.net-mvc-4gzipasp.net-optimization

MVC4 bundling GZIP and headers


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,

enter image description here

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.


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

    enter image description here

    change the application/x-javascript to text/javascript

    enter image description here

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

    enter image description here