IIS admite dos tipos de compresión: estática compresión de contenido y compresión de contenido dinámico. De acuerdo con applicationHost.config, son manejados por diferentes módulos: DynamicCompressionModule (compdyn.dll) y StaticCompressionModule (compstat.dll), y están configurados para comprimir diferentes tipos de solicitudes. Además, supongo que la compresión dinámica no almacena en caché las solicitudes comprimidas en lugar de la compresión estática (de forma predeterminada, los archivos comprimidos se guardan en %SystemDrive%\inetpub\temp\IIS Temporary Compressed Files
).IIS7: Diferencias entre la compresión de contenido estático y dinámico
Sin embargo, además de esas diferencias obvias, sospecho que hay algo más. Creo que se conectan a la canalización de IIS de una forma ligeramente diferente. ¿Alguien podría tener un poco de más detalles?
La forma en que me enteré fue que I was toying with a custom module for modifying CSS files on fly. Cuando se activó la compresión estática (y se configuró para manejar el conjunto predeterminado de archivos, es decir, también text/css), en la solicitud en caché, mi módulo personalizado recibió el contenido ya comprimido. Cuando moví text/css a la lista de solicitud comprimida dinámicamente, todo comenzó a funcionar. Pero me gustaría tener una prueba más sólida de que realmente es la forma correcta de hacerlo. ¿Hay algunas otras consecuencias/problemas conocidos?
Actualización: Creo que puedo tener una teoría de por qué está sucediendo. Puede que no sea 100% correcto, pero al menos puede explicar el comportamiento observado. Creo que el módulo de compresión estática se registra a los siguientes eventos (entre algunos otros):
RQ_MAP_REQUEST_HANDLER
RQ_EXECUTE_REQUEST_HANDLER
Luego, cuando se sirve una solicitud de un archivo estático, el módulo de compresión estática en OnMapRequestHandler comprueba si el archivo ha sido comprimido antes y si el archivo real no ha sido cambiado. Si es así, volverá a mapear la solicitud a sí mismo (devolviendo la redirección apropiada usando IMapHandlerProvider). Cuando más tarde sirva la respuesta en OnExecuteRequestHandler, envía el archivo comprimido. Si, por otro lado, el archivo no se ha comprimido antes o si ha cambiado, no realiza la redirección de asignación y deja que el módulo de contenido estático atienda la solicitud y luego, en OnPostExecuteRequestHandler, comprime el contenido (y actualiza su caché) . Como mencioné anteriormente, no estoy diciendo que esto sea exactamente lo que está sucediendo (no conozco el código fuente), puede ser solo una aproximación. Además, el módulo de compresión dinámica probablemente no haga nada de esto. Simplemente comprime las respuestas salientes a veces después de RQ_EXECUTE_REQUEST_HANDLER.