Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IIS understand static files in MVC as dynamic content

Playing with the httpCompression I relalized that IIS understand static files in MVC as dynamic content, so even if you tick the "Enable static content compression", but don't tick "Enable dynamic content compression", IIS will return the .css and .js files without compression:

GET /MVCX/Content/Site.css HTTP/1.1
Host: localhost
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2
Accept: text/css,*/*;
Referer: http://localhost/mvcx/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

HTTP/1.1 200 OK
Content-Type: text/css
Last-Modified: Mon, 05 Dec 2011 12:42:37 GMT
Accept-Ranges: bytes
ETag: "c79895e4bb3cc1:0"
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Mon, 05 Dec 2011 12:44:43 GMT
Content-Length: 1005

But then if I tick the "Enable dynamic content compression" the files are compressed:

GET /MVCX/Content/Site.css HTTP/1.1
Host: localhost
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2
Accept: text/css,*/*;
Referer: http://localhost/mvcx/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

HTTP/1.1 200 OK
Content-Type: text/css
Content-Encoding: gzip
Last-Modified: Mon, 05 Dec 2011 12:42:37 GMT
Accept-Ranges: bytes
ETag: "c79895e4bb3cc1:0"
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Mon, 05 Dec 2011 12:48:36 GMT
Content-Length: 522

Even if I try to ignore the routes to ~/Content and ~/Scripts, these files are still understood as dynamic content:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{Content}/{*pathInfo}");
        routes.IgnoreRoute("{Scripts}/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    }

I think this is probably because the web.config line that is needed for MVC but also forces all the request through the ASP.NET pipeline:

<modules runAllManagedModulesForAllRequests="true" />

UPDATE: I have tried to put this setting to false and happens the same.

Is there a way to avoid it? I don't want compression for my dynamic content but I do want it for my static content.

Or is the only way put the files somewhere else?

Cheers.

like image 908
vtortola Avatar asked Dec 05 '11 15:12

vtortola


People also ask

What is static content compression in IIS?

Static Compression: IIS 7 caches compressed static content in the path that is specified by the directory attribute, which increases compression performance by eliminating the need to recompress content that has already been compressed.

What is IIS dynamic compression?

IIS Dynamic Compression configuration: Dynamic compression is a feature that allows the IIS web-server to compress responses coming from such handlers as the ASP.net Managed Handler, ISAPI Extensions or CGI handlers that dynamically generate responses for requests they handle.

Which of the files are static files in ASP NET MVC app?

In this article Static files, such as HTML, CSS, images, and JavaScript, are assets an ASP.NET Core app serves directly to clients by default.


1 Answers

I think you'll find Rick has already answered your question here:

http://www.west-wind.com/weblog/posts/2011/May/05/Builtin-GZipDeflate-Compression-on-IIS-7x

I'm not sure why you are having that issue to be honest. Static Compression is working out of the box for me in MVC3, no special changes needed.

Like RickNZ said, make sure the mime types are accounted for properly in applicationhost.config.

like image 73
one.beat.consumer Avatar answered Oct 21 '22 01:10

one.beat.consumer