使用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并发生相同的事情。
有没有办法避免它?我不希望压缩我的动态内容,但我确实想要它用于我的静态内容。
或者是将文件放在其他地方的唯一方法吗?
干杯。
答案 0 :(得分:1)
我想你会发现Rick已在这里回答了你的问题:
http://www.west-wind.com/weblog/posts/2011/May/05/Builtin-GZipDeflate-Compression-on-IIS-7x
我不确定为什么你这个问题说实话。静态压缩在MVC3中为我开箱即用,无需进行任何特殊更改。
像RickNZ所说,确保在applicationhost.config
中正确考虑了mime类型。
答案 1 :(得分:0)
您可以从IIS管理器基于每个文件夹启用动态压缩。首先单击Connections窗格中的文件夹名称,然后双击中心窗格中的Compression图标,并选择Enable dynamic compression。
或者,这是另一种更蛮力的方式:
编辑C:\ Windows \ System32 \ inetsrv \ config \ applicationHost.config(IIS配置文件;先制作副本)。
在httpCompression部分中,删除mimeType =“ / ”和mimeType =“text / *”的行,并用mimeType =“text / css”替换它们(JS的条目是已经存在)。
重新启动IIS后,动态压缩应仅适用于您的CSS&amp; JS文件,而不是你的aspx输出(文本/ html)。
答案 2 :(得分:0)
<modules runAllManagedModulesForAllRequests="true" />
IIS 7.5 SP1或IIS7 SP1不再需要。它是MVC所必需的,因此对无扩展URL的请求通过asp.net管道。
无扩展URL支持是IIS7 SP1和IIS7.5 SP1中的新增功能。 它可用于IIS7作为您必须请求和安装的补丁。 您可以在这里找到完整的问题答案: http://support.microsoft.com/kb/980368
在IIS配置中,选中“映射管理器”,“路径”列。也许你有这些文件的映射设置。 另请使用StaticFileHandler检查*路径。
您是否删除了web.config中的任何处理程序?也许通过添加声明?
答案 3 :(得分:0)
应该有帮助(IIS7 MVC3):
将另一个映射器添加到web.config
<system.webServer>
<modules runAllManagedModulesForAllRequests="false">
...
</modules>
<handlers>
<remove name="UrlRoutingHandler" />
<clear />
<add name="svc-ISAPI-4.0" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="AssemblyResourceLoader-Integrated" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />
<add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" modules="ManagedPipelineHandler" resourceType="Unspecified" requireAccess="Read" preCondition="integratedMode" />
<add name="StaticFileHandler-html" path="*.html" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read"/>
...
<add name="StaticFileHandler-css" path="*.css" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
<add name="StaticFileHandler-js" path="*.js" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
<add name="wildcard" path="*" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode" responseBufferLimit="4194304" />
<add name="PageHandlerFactory-Folders" path="*" verb="*" type="System.Web.UI.PageHandlerFactory" modules="ManagedPipelineHandler" resourceType="Unspecified" requireAccess="Read" allowPathInfo="false" preCondition="integratedMode" />
<add name="StaticFileHandler" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
</handlers>