2011-12-05 83 views
6

使用httpCompression播放IIS將MVC中的靜態文件理解爲動態內容,因此即使勾選了「啓用靜態內容壓縮」,但卻不勾選「 啓用動態內容壓縮」,IIS將返回.css.js文件,而無需壓縮:IIS將MVC中的靜態文件理解爲動態內容

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 
     ); 
    } 

我想這大概是因爲這是需要在web.config線MVC也迫使通過ASP.NET管道中的所有要求:

<modules runAllManagedModulesForAllRequests="true" /> 

更新:我試圖把這個設置爲false,併發生一樣。

有沒有辦法避免它?我不想爲我的動態內容進行壓縮,但我確實希望爲我的靜態內容進行壓縮。

或者是將文件放在其他位置的唯一方法?

乾杯。

+0

我的回答(和Rick施特拉爾的職位)幫你呢?好奇,如果你有過這個團。 –

回答

0

您可以從IIS管理器啓用基於每個文件夾的動態壓縮。首先在連接窗格中單擊文件夾名稱,然後雙擊中間窗格中的壓縮圖標,然後選擇啓用動態壓縮。

或者,這裏是另一個,更暴力的方式:

編輯C:\ WINDOWS \ SYSTEM32 \ INETSRV \設置\的applicationHost.config(IIS的配置文件;先構建一個備份)。

在httpCompression部,取出線,mime類型=「/‘和mime類型=’文本/ *」,並與mime類型=‘文本/ CSS’(對於JS的條目已經存在)替換它們。

重新啓動IIS後,動態壓縮應該只應用於您的CSS文件,而不是您的aspx輸出(這是text/html)。

+0

我正在使用MVC,所以沒有文件夾。我試圖在主Web.config上設置它,但它不起作用。 – vtortola

+0

默認情況下,我不認爲你可以在web.config中設置urlCompression標籤;作爲IIS設置,它位於applicationHost.config中。您應該能夠編輯配置以設置正確的路徑。你有沒有嘗試在applicationHost.config中更改mimeType? – RickNZ

0
<modules runAllManagedModulesForAllRequests="true" /> 

對於IIS 7.5 SP1或IIS7 SP1不再需要。它是MVC所必需的,所以對無擴展url的請求通過asp.net管道。

擴展網址支持是IIS7 SP1和IIS7.5 SP1中的新增功能。 它可用於IIS7作爲您必須請求和安裝的修補程序。 您將在這裏找到它完全解答您的疑問: http://support.microsoft.com/kb/980368

在IIS配置,勾選「映射管理」,「路徑」欄。也許你有這些文件的映射設置。 也用StaticFileHandler檢查*路徑。

您是否刪除了web.config中的任何處理程序?也許通過添加一個聲明?

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>