Вопрос по asp.net, css, iis-7 – Неправильный тип содержимого IIS для сжатого CSS

3

Я разрабатываю часть сайта ASP.NET, который использует в основном темы, но в папке тем есть пара CSS-файлов. Они включены в web.config другим разработчиком, например так:

<code><Content Include="App_Themes\SoftOrange\CMSStyles.css" />
<Content Include="App_Themes\SoftOrange\ContentStyles.css" />
</code>

На нашем внутреннем тестовом сервере (IIS7, Server 2008 R2 Enterprise) включены глобальные параметры диспетчера IIS для статического и динамического сжатия для файлов размером более 2700 байт. Статическое и динамическое сжатие для конкретного сайта также включены.

В какой-то момент (возможно, когда CMSStyles.css достиг 2700 байт), некоторые стили были заполнены - т.е. были явно не загружаются, глядя на страницу. Я обнаружил, что тип содержимого (в соответствии с firefox 7.0.1) показывает text / css, и когда я загружал URL для CMSStyles.css, он выглядел как обычный сжатый мусор в текстовом редакторе:

‹�����
 и т. д. IE не открывает файл css напрямую, но когда я использую инструменты разработчика, чтобы показать css, он кажется пустым.

Я отключил статическое сжатие контента только для этого сайта, и теперь CSS-файлы загружаются правильно. Мой вопрос почему ?! Это проблема типа контента, Content-Encoding, или это проблема IIS, или проблема с тем, как CSS используется в веб-приложении?

Благодарю.

РЕДАКТИРОВАТЬ:

Это заголовки для запроса GET для CMSStyles.css: Заголовки ответа

Accept-Ranges  bytes
Content-Encoding    gzip
Content-Length  1728
Content-Type    text/css
Date    Fri, 13 Apr 2012 01:22:43 GMT
Etag    "80a762a82cecd1:0"
Last-Modified   Fri, 30 Mar 2012 04:22:03 GMT
Persistent-Auth true
Server  Microsoft-IIS/7.5
Vary    Accept-Encoding
X-Powered-By    ASP.NET

Заголовки запроса

Accept text/css,*/*;q=0.1
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding gzip, deflate
Accept-Language en-gb,en;q=0.5
Connection  keep-alive
Cookie  -removed-
Host    -removed-
Referer -removed-
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1

похоже, кодировка содержимого - это corrent: gzip.

спасибо, не знал, что ты сможешь сделать это в Net Panel. Я обновил свой пост заголовками. thinkOfaNumber
Используйте инструмент, такой как Firebug (или встроенные инструменты Chrome), чтобы посмотреть заголовки HTTP, и вы можете найти ответ. Tim Medora

Ваш Ответ

1   ответ
1

Content-Length.

Проверьте, если вы установилиContent-Length в любой части вашего кода, удалите его, и он будет работать снова. Это почему ? потому что если вы установитеContent-Length в заголовке IIS затем не может изменить его на сжатый, и распаковка gzip завершается неудачно. Почему IIS не может изменить это? потому что по умолчанию, если вы установите заголовок на IIS, этот заголовок останется и не может быть изменен (особенно, если вы очистите его рано). Есть флаг, который позволяет IIS изменить его после того, как вы его установите, но лучше его просто избегать.

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

Update

От @thinkOfaNumber: получаетсяI was using devexpress compression as well as IIS compression, Я отключил сжатие devexpress в web.config, и это работает!

Здесь показано, что первое сжатие установилоContent-Length и второе сжатие не может изменить его, потому чтоContent-Length Это запись в заголовок, и заголовок не может измениться * после того, как вы его установили, поэтому второе сжатие изменяет окончательную сжатую сторону, в результате чего браузер не может правильно его прочитать, а затем не распаковывает правильно.

[*] Существует способ изменить заголовки после отправки их в IIS и перед отправкой их в браузер, и это можно сделать, изменив поведение IIS по умолчанию, но это не так просто, и я не знаю, может решить эту проблему.

Хорошо, извините за то, что я нуб, но я применял изменения без перезапуска приложения. Как оказалось, длина содержимого меняется для этого CSS-файла, когда сжатие включено ... извините за французский, но wtf? thinkOfaNumber
Я не устанавливаю это нигде программно. Странно, что числа всегда одинаковы (1728 или 1297) и один всегда сломан, один всегда работает ... thinkOfaNumber
@thinkOfaNumber Вы можете получить другую длину, потому что gzip делает динамическое сжатие и, возможно, это изменение. Идея состоит в том, чтобы не устанавливать его программно внутри вашего кода.
странно ... С установленным сжатием и выполнением ctrl-refresh для очистки кэша при каждой загрузке я получаю разные ответы:Content-Length 1728 и таблица стилей застегнута и сломана,Content-Length 1297 и таблица стилей застегивается и работает ... thinkOfaNumber
@thinkOfaNumber Может быть, какой-то модуль установил его, или, может быть, есть двойной компресс как-то ... из двух разных модулей.

Похожие вопросы