IIS7: различия между сжатием статического и динамического содержимого

IIS поддерживает два типа сжатия: статическое сжатие содержимого и динамическое сжатие содержимого. applicationHost.config , они обрабатываются разными модулями: DynamicCompressionModule (compdyn.dll) и StaticCompressionModule (compstat.dll), и они настроены на сжатие различных типов запросов . Я предполагаю, что динамическое сжатие не кэширует сжатые запросы, в отличие от статического сжатия (по умолчанию сжатые файлы сохраняются в % SystemDrive% \ inetpub \ temp \ IIS Temporary Compressed Files ).

Однако, помимо этих очевидных различий, я подозреваю, что есть еще кое-что. Я думаю, что они подключаются к конвейеру IIS немного по-другому. Может ли кто-нибудь проникнуть внутрь некоторых дополнительных деталей?

как я нашел из того, что я играл с настраиваемым модулем для изменения файлов CSS на лету . Когда статическое сжатие было включено (и настроено на обработку набора файлов по умолчанию, то есть также text / css), по кэшированному запросу мой пользовательский модуль обслуживал уже сжатый gzip-контент. Когда я переместил text / css в список динамически сжимаемых запросов, все заработало.Но я хотел бы получить более твердое доказательство того, что это действительно правильный способ сделать это. Есть ли другие известные последствия / проблемы?

Обновление: Думаю, у меня есть теория относительно того, почему это происходит. Это может быть не на 100% правильным, но, по крайней мере, может объяснить наблюдаемое поведение. Я думаю, что модуль статического сжатия регистрируется для следующих событий (среди некоторых других):

RQ_MAP_REQUEST_HANDLER
RQ_EXECUTE_REQUEST_HANDLER

Затем, когда подается запрос на статический файл, модуль статического сжатия в OnMapRequestHandler проверяет, есть ли в файле был сжат ранее и не был ли изменен фактический файл. Если это так, он повторно отобразит запрос на себя (вернув соответствующее перенаправление с помощью IMapHandlerProvider ). Когда позже он фактически обслуживает ответ в OnExecuteRequestHandler , он отправляет сжатый файл. Если, с другой стороны, файл не был сжат ранее или был изменен, он не выполняет перенаправление отображения и позволяет модулю статического содержимого обслуживать запрос, а затем в OnPostExecuteRequestHandler сжимает содержимое (и обновляет свой кеш). Как упоминалось выше, я не говорю, что это именно то, что происходит (я не знаю исходный код), это может быть только приближение. Кроме того, модуль динамического сжатия, скорее всего, этого не делает. Иногда он просто сжимает исходящие ответы после RQ_EXECUTE_REQUEST_HANDLER.

17
задан Community 23 May 2017 в 12:02
поделиться