IIS поддерживает два типа сжатия: статическое сжатие содержимого и динамическое сжатие содержимого. Согласно applicationHost.config , они обрабатываются различными модулями: DynamicCompressionModule (compdyn.dll) и StaticCompressionModule (compstat.dll), и они настроены на сжатие различных типов запросов . Кроме того, я предполагаю, что динамическое сжатие не кэширует сжатые запросы в отличие от статического сжатия (по умолчанию сжатые файлы сохраняются в %SystemDrive%\inetpub\temp\IIS Temporary Compressed Files
).
Однако, помимо этих очевидных различий, я подозреваю, что есть еще кое-что. Я думаю, что они подключаются к конвейеру IIS немного по-другому. У кого-нибудь есть детали в некоторых деталях?
Я обнаружил, что я играл с пользовательским модулем для изменения CSS-файлов на лету . Когда статическое сжатие было включено (и настроено для обработки набора файлов по умолчанию, т. Е. Также text / css), по кешированному запросу мой пользовательский модуль получил уже сжатый контент. Когда я переместил text / css в список динамически сжатых запросов, все это заработало. Но я хотел бы получить более веское доказательство того, что это действительно правильный способ сделать это. Есть ли другие известные последствия / проблемы?
Обновление: Думаю, у меня есть теория о том, почему это происходит. Это может быть не на 100% правильно, но, по крайней мере, это может объяснить наблюдаемое поведение. Я думаю, что модуль статического сжатия регистрирует себя для следующих событий (среди прочих):
RQ_MAP_REQUEST_HANDLER
RQ_EXECUTE_REQUEST_HANDLER
Затем, когда подается запрос на статический файл, модуль статического сжатия в OnMapRequestHandler проверяет, был ли файл сжат ранее и не был ли изменен фактический файл. Если это так, он повторно сопоставит запрос с самим собой (возвращая соответствующее перенаправление, используя IMapHandlerProvider ). Когда позднее он действительно отправляет ответ в OnExecuteRequestHandler , он отправляет сжатый файл. Если, с другой стороны, файл не был сжат ранее или изменился, он не выполняет перенаправление сопоставления и позволяет модулю статического содержимого обслуживать запрос, а затем OnPostExecuteRequestHandler сжимает содержимое (и обновляет свой кеш). Как уже упоминалось выше, я не говорю, что это именно то, что происходит (я не знаю исходный код), это может быть только приблизительным. Кроме того, модуль динамического сжатия, скорее всего, не делает ничего из этого. Он просто сжимает исходящие ответы иногда после RQ_EXECUTE_REQUEST_HANDLER.