2011-12-05 8 views
6

Jugando con httpCompression I relativé que IIS entiende archivos estáticos en MVC como contenido dinámico, por lo que incluso si marca "Habilitar compresión de contenido estático", pero no marque " Habilitar compresión de contenido dinámico", IIS devolverá los archivos .css y .js sin compresión:IIS entiende archivos estáticos en MVC como contenido dinámico

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 

Pero entonces si marcar la casilla 'Habilitar compresión de contenido dinámico' los archivos están comprimidos:

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 

Incluso si trato de ignorar las rutas a ~/Content y ~/Scripts, estos archivos están siendo entendido como contenido dinámico:

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

Creo que esto es probablemente debido a que la línea de web.config que se necesita para MVC, pero también obliga a todas las peticiones a través de la canalización de ASP.NET:

<modules runAllManagedModulesForAllRequests="true" /> 

ACTUALIZACIÓN: he tratado de poner este valor en false y sucede lo mismo.

¿Hay alguna manera de evitarlo? No quiero compresión para mi contenido dinámico, pero sí quiero para mi contenido estático.

¿O es la única forma de poner los archivos en otro lugar?

Saludos.

+0

mi respuesta (y post de Rick Strahl) que ayuda en absoluto? Curioso si alguna vez has pasado este bulto. –

Respuesta

0

Puede habilitar la compresión dinámica por carpeta, desde el Administrador de IIS. Haga clic primero en el nombre de la carpeta en el panel de Conexiones, luego haga doble clic en el ícono Compresión en el panel central y seleccione Activar compresión dinámica.

O, aquí hay otro, más bruta manera vigor:

Editar C: \ Windows \ System32 \ inetsrv \ config \ applicationHost.config (el archivo de configuración de IIS, haga primero una copia).

En la sección de compresión http, eliminar las líneas con mimeType = "/ "y mimeType =" text/*", y reemplazarlos con mimeType = "text/css" (una entrada para JS ya está ahí).

Después de reiniciar IIS, la compresión dinámica solo se debe aplicar a sus archivos CSS & JS, no a su salida aspx (que es text/html).

+0

Estoy usando MVC, por lo que no hay carpetas. Intenté configurarlo en el Web.config principal, pero no funcionó. – vtortola

+0

De manera predeterminada, no creo que pueda establecer la etiqueta urlCompression en web.config; como configuración de IIS, vive en applicationHost.config. Debería poder editar la configuración para establecer la ruta correcta. ¿Intentó el cambio de mimeType en applicationHost.config? – RickNZ

0
<modules runAllManagedModulesForAllRequests="true" /> 

ya no se requiere para IIS 7.5 SP1 o IIS7 SP1. Fue necesario para MVC, por lo que las solicitudes de url sin extensión pasan por la tubería asp.net.

El soporte de url sin extensión es nuevo en IIS7 SP1 e IIS7.5 SP1. Está disponible para IIS7 como un parche que debe solicitar e instalar. Usted se encuentra aquí con respuestas completas a sus preguntas : http://support.microsoft.com/kb/980368

En configuración de IIS, marque "gestor de mapeo", columna "camino". Quizás tengas una configuración de mapeo para estos archivos. También verifique la * ruta con StaticFileHandler.

¿Eliminaste algún controlador en tu web.config? ¿Tal vez al agregar una declaración?

0

Se espera que ayude (IIS7 MVC3):

Agregar otro asignador a su 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> 
Cuestiones relacionadas