asp.net - para - instalar asp net windows server 2016
IIS y contenido estático? (2)
De acuerdo con Ultra-Fast ASP.NET: Capítulo 3 - Almacenamiento en caché :
Los archivos que el navegador recupera del servidor se deben almacenar en la memoria caché del navegador el mayor tiempo posible para ayudar a minimizar los viajes de ida y vuelta del servidor.
Pero, ¿cómo sabe IIS qué es y qué es un contenido estático ?
¿Son solo imágenes, CSS, JS y no ASPX, ashx ...?
¿Dónde puedo ver en IIS lo que ya se considera estático y lo que no ?
¿Qué pasa con el escenario donde se ha declarado una página con el encabezado
<%@ OutputCache
(sinlocation
)? ¿Lasimages
, los archivos fuenteCSS
yJS
dentro de ella también se están imprimiendo en caché con las mismas propiedades?Como una buena práctica, debería establecer un año en el futuro como el tiempo de expiración máximo. Debería usar eso como predeterminado para todo el contenido estático en el sitio
Entonces hice esto:
Pero más tarde, después de presionar OK
, no puedo encontrar ningún menú de resumen que me muestre: a quien ya puse un encabezado de respuesta (en este caso: la carpeta css
).
Actualmente , para ver que la carpeta css
se ha aplicado con encabezados de respuesta, tengo que volver a la carpeta css
-->
Encabezado de respuesta HTTP -->
Establecer encabezados comunes -->
y luego la veo. No está escrito en el web.config.
Pero si lo hago para un archivo ( Login.aspx
por ejemplo): lo veo en web.config:
<configuration>
<location path="Login.aspx">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseExpires" cacheControlMaxAge="1.00:00:00" httpExpires="Fri, 15 Feb 2013 00:00:00 GMT" />
</staticContent>
</system.webServer>
</location>
</configuration>
- El contenido estático es el que lee IIS y envía al navegador sin procesar. Allí puede configurar IIS para que incluya algún
Cache-Control Header
de caché para almacenarlo en caché en las computadoras del navegador de los clientes. - Puedes hacer ese éter configurando directamente IIS, ether mediante comandos en
web.config
como dices. Los comandos que agrega en web.config y conciernen al IIS, no tienen que ver con asp.net en sí mismo, pero el IIS e IIS guardan su configuración en un archivo diferente, de modo que cuando cambie ese caché, los encabezados de control dirigen el IIS no los ve en web.config. - Ahora, para el contenido estático como imágenes, CSS, JavaScript y otros archivos similares , dicen que puede seguir la política de "no caducar" al agregar que caducan los 10 años.
- El problema aquí es que si no puede cambiar el contenido del archivo estático, si, por ejemplo, almacena en caché un archivo de JavaScript con 10 años, y realiza un pequeño cambio en él, entonces necesita éter para cambiar el nombre del archivo, éter a agregue algún parámetro al final de este.
- Ahora la
<%@ OutputCache
en un control se refiere al caché del servidor y no al cliente, y lo que realmente se hace es almacenar en caché el procesamiento del control en el servidor para que la próxima vez que lo solicite no pierda tiempo para renderizar de nuevo, pero léelo de la memoria caché, todavía lo envía al navegador.
Y también puede leer esta respuesta para obtener más información: ¿cuál es la diferencia entre el caché IIS (dinámico y estático), OutPutCache y el caché del navegador?
Entiendo tu situación. En algún momento es confuso cómo IIS maneja un archivo. También es diferente para IIS 6 vs IIS 7 y diferente para piscinas de aplicaciones clásicas y piscinas de aplicaciones de modo integrado. Mi experiencia es principalmente con Integrated App Pools en IIS 7.5, así que ese es el entorno en el que puedo comentar con más precisión.
Primera pregunta
Pero, ¿cómo sabe IIS qué es realmente un contenido estático y qué no?
¿Son solo imágenes, css, js y no ASPX, ashx ...?
¿Dónde puedo ver en el IIS lo que ya se considera estático y qué no?
Puede inspeccionar la lista de manejadores de archivos en IIS navegando a su sitio web y luego hacer clic en ''Asignaciones de manejadores''. Por defecto, estos se heredan de .Net base web.config, que está en una ubicación diferente según su versión de .Net framework.
- C: / Windows / Microsoft.NET / Framework / v2.0.50727 / CONFIG / web.config
- C: / Windows / Microsoft.NET / Framework / v4.0.30319 / Config / web.config
Si un archivo que se solicita no está ya asignado explícitamente a otro controlador, corresponde a un controlador catch all ( *
) como última opción ( System.Web.DefaultHttpHandler
) que determina si se trata de un archivo estático o una solicitud de exploración de directorio. Por lo tanto, los archivos estáticos son simplemente archivos que no están vinculados a otro controlador. Por ejemplo, verá que *.aspx
ya está asignado a System.Web.UI.PageHandlerFactory
antes de este controlador predeterminado. Entonces será procesado por ese controlador y no se considerará un archivo estático. Si eliminó esa asignación, técnicamente podría servir * .aspx como un archivo estático si realmente quisiera (solo como prueba de cómo funciona).
Pero también puede listar explícitamente un tipo de archivo como un archivo estático al agregar una entrada en la sección httpHandlers de su sitio web.config mapeando las extensiones de archivo a System.Web.StaticFileHandler
en IIS. Por ejemplo:
<configuration>
<system.webServer>
<handlers>
<add name="StaticHandler" verb="*" path="*.zip" type="System.Web.StaticFileHandler" preCondition="integratedMode" />
</handlers>
</system.webServer>
</configuration>
Este ejemplo utiliza la sección de configuración <system.webServer>
, por lo que es para un grupo de aplicaciones que se ejecuta en modo integrado .
Segunda pregunta
¿Qué pasa con el escenario donde se ha declarado una página con el encabezado <% @ OutputCache (sin ubicación)? ¿Las imágenes, css, js src dentro de él, también se están imprimiendo en caché con las mismas propiedades?
No. Debido a que la página está siendo servidor como una solicitud separada (tal vez incluso por un manejador separado) puede tener encabezados / sugerencias de caché totalmente diferentes. La página de host y los recursos que puede usar no están relacionados desde una perspectiva de almacenamiento en caché.
De hecho, es posible que desee tener un período de caché más corto para * .html y un período de caché más largo para * .jpg o * .png? Algo para considerar.
Tercera pregunta
Como mejor opción, debería establecer un año en el futuro como el tiempo máximo de caducidad. Debería usarlo como valor predeterminado para todo el contenido estático en el sitio.
Hmm ... Puede que no llegue tan lejos como un año. ¿Qué tal un mes? Yo establecería una política global como esta:
<configuration>
<system.webServer>
<staticContent>
<!-- Set expire headers to 30 days for static content-->
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
</staticContent>
</system.webServer>
</configuration>
Es lo mismo que la muestra que mostró anteriormente, pero no está dentro de un elemento <location>
, sino que está en el elemento raíz <configuration>
, por lo que es la política predeterminada. De nuevo, esto es para un Pool de aplicaciones que se ejecuta en modo integrado . Algunas veces también necesitas encender:
<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<!-- stuff -->
</modules>
</system.webServer>
<system.webServer>
Esto solo asegura que los archivos estáticos se procesen a través del controlador de archivos estáticos administrados que respeta los elementos de configuración anteriores.
Editar comentarios de direcciones
La documentación para el diálogo de configuración que publicó arriba se encuentra aquí: Configurar el encabezado de respuesta de HTTP Expires (IIS 7)
Aparentemente, estas configuraciones se guardan en C: / Windows / System32 / inetsrv / config / applicationHost.config
No tengo IIS7 y desarrollo personalmente en IIS 7.5 ahora. ¡Por favor, publique un comentario si puede verificar que esta ubicación sea precisa!