在使用httpCompression时,我认为IIS将MVC中的静态文件理解为动态内容,因此,即使您选中“启用静态内容压缩”,但不勾选“启用动态内容压缩”,IIS也会返回无需压缩的.css
和.js
文件:
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
但是,如果我勾选“启用动态内容压缩”,文件将被压缩:
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
即使我尝试忽略到
~/Content
和~/Scripts
的路由,这些文件仍然可以理解为动态内容: 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
);
}
我认为这可能是因为MVC需要web.config行,但它还会通过ASP.NET管道强制所有请求:
<modules runAllManagedModulesForAllRequests="true" />
更新:我试图将此设置设置为false并发生相同的情况。
有办法避免吗?我不希望对动态内容进行压缩,但我确实希望对静态内容进行压缩。
还是将文件放到其他地方的唯一方法?
干杯。
最佳答案
我想您会发现Rick在这里已经回答了您的问题:
http://www.west-wind.com/weblog/posts/2011/May/05/Builtin-GZipDeflate-Compression-on-IIS-7x
我不确定您为什么会遇到这个问题。在MVC3中,静态压缩对我来说是开箱即用的,不需要任何特殊更改。
就像RickNZ所说的那样,请确保applicationhost.config
中正确地说明了mime类型。
关于asp.net-mvc - IIS将MVC中的静态文件理解为动态内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8387500/