IIS7: les Différences entre le contenu statique et dynamique de compression

IIS prend en charge deux types de compression: statique la compression de contenu et dynamique la compression de contenu. Selon applicationHost.config, ils sont gérés par différents modules: DynamicCompressionModule (compdyn.dll) et StaticCompressionModule (compstat.dll), et ils sont configurés pour compresser les différents types de demandes. Aussi, je devine que la compression dynamique ne cache pas le comprimé demandes par opposition à la compression statique (par défaut, les fichiers compressés sont enregistrés à %SystemDrive%\inetpub\temp\IIS Temporary Compressed Files).

Cependant, à côté de ces différences évidentes, je soupçonne qu'il y a quelque chose d'autre. Je pense qu'ils le crochet à l'IIS pipeline d'une manière légèrement différente. Quelqu'un ont un intérieur en un peu plus de détails?

J'ai trouvé était que J'ai été jouer avec un module personnalisé pour modifier les fichiers CSS à la volée. Lorsque la compression statique a été activée (et mis à traiter l'ensemble par défaut des fichiers, c'est à dire également text/css), sur la mise en cache demande mon module personnalisé a été servi le déjà format de contenu. Quand j'ai déménagé text/css à la liste de compression dynamique en demande, tout a commencé à travailler. Mais je voudrais avoir une plus solide, la preuve que c'est vraiment la bonne façon de le faire. Y a t'il d'autres conséquences connues /problèmes?

Mise à jour: je crois que j'ai une théorie sur pourquoi il se passe. Il ne peut pas être 100% correct, mais c'est au moins ça peut expliquer le comportement observé. Je pense que la compression statique module enregistre les événements suivants (parmi d'autres):

RQ_MAP_REQUEST_HANDLER
RQ_EXECUTE_REQUEST_HANDLER

Ensuite, lorsqu'une requête pour un fichier statique est servi, la compression statique module dans OnMapRequestHandler vérifie si le fichier a été compressé à l'avant, et si le fichier n'a pas été modifié. Si oui, il sera re-mapper la demande à lui-même (de retour à la appropriée de redirection à l'aide de IMapHandlerProvider). Lorsque plus tard, il sert en fait de la réponse en OnExecuteRequestHandler, il envoie le fichier compressé. Si, d'autre part, le fichier n'a pas été compressé à l'avant ou si elle a changé, ce n'est pas faire de la cartographie et vous permet de rediriger le contenu statique module de répondre à la requête, puis plus tard dans OnPostExecuteRequestHandler compresse le contenu (et met à jour son cache). Comme mentionné ci-dessus, je ne dis pas que c'est exactement ce qui se passe (je ne sais pas le code source), il est peut-être qu'une approximation. Aussi, la dynamique de compression module n'a pas plus de chances de faire de tout cela. Simplement, il compresse les sortants des réponses parfois après RQ_EXECUTE_REQUEST_HANDLER.

OriginalL'auteur Jan Zich | 2011-04-10