IIS understands static files in MVC as dynamic content

Playback with httpCompression I am relalized that IIS understands static files in MVC as dynamic content, so even if you check " Enable static compression of content " but don't check " Enable dynamic compression of content , IIS will return .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 check " 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 needed for MVC also forces the entire request through the ASP.NET pipeline:

 <modules runAllManagedModulesForAllRequests="true" /> 

UPDATE: I tried to set this parameter to false and will be the same.

Is there any way to avoid this? I do not want compression for my dynamic content, but I want it for my static content.

Or the only way to place files somewhere else?

Greetings.

+6
source share
4 answers

I think you will find that Rick has already answered your question:

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

I'm not sure why you have such a problem, to be honest. Static Compression works in a box for me in MVC3, no special changes are required.

As with RickNZ, make sure the mime types are properly accounted for in applicationhost.config .

+1
source

You can enable dynamic compression for each folder from IIS Manager. First, click the folder name in the Connections panel, then double-click the Compression icon in the center panel and select Enable Dynamic Compression.

Or, here's another, rougher way:

Edit C: \ Windows \ System32 \ inetsrv \ config \ applicationHost.config (IIS configuration file, first make a copy).

In the httpCompression section, delete the lines with mimeType = "/" and mimeType = "text / *" and replace them with mimeType = "text / css" (an entry for JS already exists).

After restarting IIS, dynamic compression should apply only to your CSS and JS files, and not to the aspx output (which is text / html).

0
source
 <modules runAllManagedModulesForAllRequests="true" /> 

no longer required for IIS 7.5 SP1 or IIS7 SP1. This was necessary for MVC, so requests for an unlimited URL go through the asp.net pipeline.

Extended URL support is new in IIS7 SP1 and IIS7.5 SP1. It is available for IIS7 as a patch that you must request and install. You will find it here with full answers to your questions: http://support.microsoft.com/kb/980368

In IIS configuration, select the Mapping Manager check box, the path column. Perhaps you have a mapping setting for these files. Also check * path with StaticFileHandler.

Have you removed the handler in your web.config? Maybe adding an expression?

0
source

This should help (IIS7 MVC3):

Add another mapper to your 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> 
0
source

Source: https://habr.com/ru/post/903120/


All Articles