Статическое сжатие, когда для runAllManagedModulesForAllRequests установлено значение true

Мы обновили время до того, как наше устаревшее веб-приложение ASP.NET использовало .NET Framework 4.0. Никаких проблем нет. В прошлом спринте мы внедрили новый модуль для перезаписи оптимизированных для SEO URL. Но поскольку мы хотим использовать URL-адреса без какого-либо файла и расширения (например, вместо http://server/Some-Nice-URL/file.aspx только http://server/Some-Nice-URL/) мы были вынуждены установить для runAllManagedModulesForAllRequests значение true, потому что без этого сеанс ASP.NET был недоступен.

Теперь у нас есть проблема со статическим сжатием и GZIP. После пары обратных передач мы «потеряли» CSS и / или Javascripts. Если я обращаюсь к файлу CSS или Javascript напрямую, я иногда получаю в браузере сообщение «Ошибка кодирования содержимого», иногда файл доставлен правильно. В Fiddler длина файлов CSS или Javascript иногда неверна, но в HTTPCompression отображается кодировка GZIP и «Ответ закодирован, и мне нужно декодировать перед проверкой». После щелчка «Магическое число в заголовке GZip неверно». Если мы установим для 'runAllManagedModulesForAllRequests' или 'doStaticCompression' значение 'false', никаких проблем со статическим сжатием и "потерянными" файлами CSS и / или Javascript не будет.

Любая идея?


person Anton Kalcik    schedule 02.12.2011    source источник
comment
Проверьте порядок всех ваших модулей. Поблагодарите за то, в каком порядке устанавливается ваш модуль и как он может повлиять на другие.   -  person Kevin P. Rice    schedule 25.01.2012


Ответы (1)


Это происходит потому, что в какой-то момент вы устанавливаете длину содержимого ваших файлов в заголовке, после этого gzip пытается изменить эту длину, но терпит неудачу, потому что вы не настроили iis, чтобы иметь возможность изменять заголовки, и вы отправляете gzip файл неправильного размера, и это создает проблемы.

Чтобы решить эту проблему, найдите точку, в которой вы устанавливаете эту длину содержимого, и удалите ее или измените iss, чтобы принять изменение заголовка после того, как вы его установили.

Посмотрите на этот похожий ответ: https://stackoverflow.com/a/3210574/159270

и это: Сайт ASP.NET иногда зависает и / или показывает странный текст вверху страницы во время загрузки на серверах с балансировкой нагрузки

person Aristos    schedule 07.02.2012
comment
не полное решение, но я разобрался с вашими ссылками. Спасибо!! - person Megawolt; 08.02.2012
comment
@Megawolt Ну, я не могу дать вам полное решение, потому что на самом деле вам нужно найти в исходном коде, где вы устанавливаете длину содержимого. Возможно, некоторые из ваших модулей это делают. Это неприятная проблема, связанная с заголовками сервера. - person Aristos; 08.02.2012
comment
Да ты прав. С другой стороны, проблема только что решена. Но я могу получить такую ​​же ошибку на случайных страницах с ранее правильно обработанными ресурсами :(. У вас есть какие-нибудь советы по этому поводу? - person Megawolt; 09.02.2012
comment
@Megawolt Может, что-нибудь останется в кеше? в iis есть кеш для статических страниц, в браузере есть кеш ... вы можете определить проблему? есть в заголовках или где-то еще? Вы можете отключить gzip, чтобы посмотреть, работает ли он? вы можете проверить, есть ли конфликт gzip с iis и asp.net gzip? - person Aristos; 09.02.2012
comment
Есть .css. Когда я отлаживаю, решение работает как шарм. Но не зависит от времени, страницы или количества кликов, тот же файл .css выдает ошибку кодирования. В IIS есть кодировка gzip для статических файлов. Мой код ищет gzip или deflate для кодирования и устанавливает для этого заголовок ... В метатегах нет кеша ... Я чувствую себя отчаявшейся домохозяйкой: D - person Megawolt; 09.02.2012
comment
@Megawolt css НЕ проходит от asp.net - убедитесь, что он не прошел, и не устанавливайте снова заголовки gzip !!! IIS кеширует статическое сжатие, возможно, есть ошибка. Отключите iis cache, чтобы проверить это. Отчаянные хозяйки - это миф! они делают ххх весь день, где это отчаяние? :))) - person Aristos; 09.02.2012
comment
Извините, я забыл сказать. У меня есть подстановочный знак для дескриптора для всех файлов. Но проблема не в этом. Если они не могут пройти через .net, я не могу изменить свой Css Dynmaically. Я могу сделать это сейчас, но я иногда получаю ошибку ... Мне кажется, потому что у меня проблема, мои друзья помогают мне, но я действительно XXX: D - person Megawolt; 09.02.2012
comment
@Megawolt Если вы обрабатываете все файлы, то CSS переходит из global.asax и снова получает дополнительные заголовки для сжатия. Отладьте это на глобальном asax, чтобы узнать это и предотвратить дополнительное сжатие css! - person Aristos; 09.02.2012