Pytanie w sprawie iis-7, asp.net, content-type, css, content-encoding – Nieprawidłowy typ zawartości IIS dla skompresowanego CSS

3

Tworzę część witryny ASP.NET, która używa głównie motywów, ale ma kilka plików CSS w folderze motywów. Są one zawarte w web.config przez innego programistę, takiego jak ten:

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

Na naszym wewnętrznym serwerze testowym (IIS7, Server 2008 R2 Enterprise) globalne opcje menedżera IIS dla kompresji statycznej i dynamicznej są włączone dla plików większych niż 2700 bajtów. Włączona jest również kompresja statyczna i dynamiczna specyficzna dla witryny.

W pewnym momencie (prawdopodobnie gdy CMSStyles.css trafił 2700 bajtów) niektóre style zostały wypchane - tj. najwyraźniej nie ładowałem, patrząc na stronę. Odkryłem, że typ zawartości (zgodnie z firefox 7.0.1) wyświetlał tekst / css, a kiedy załadowałem adres URL dla CMSStyles.css, wyglądało to jak normalne skompresowane śmieci w edytorze tekstu:

‹�����
itd. IE nie otwiera bezpośrednio pliku css, ale gdy używam narzędzi programistycznych, aby pokazać css, wydaje się pusty.

Wyłączyłem statyczną kompresję treści tylko dla tej witryny, a pliki CSS ładują się teraz poprawnie. Moje pytanie brzmi: dlaczego? Czy jest to problem typu zawartości, kodowanie treści, czy jest to problem z usługami IIS, lub problem ze sposobem używania CSS w aplikacji internetowej?

dzięki.

EDYTOWAĆ:

Są to nagłówki dla żądania GET dla CMSStyles.css: Nagłówki odpowiedzi

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

Nagłówki żądań

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

wygląda na to, że kodowanie treści jest aktualne: gzip.

Użyj narzędzia takiego jak Firebug (lub wbudowane narzędzia Chrome), aby przejrzeć nagłówki HTTP i możesz znaleźć odpowiedź. Tim Medora
dzięki, nie wiedziałem, że możesz to zrobić w panelu Net. Zaktualizowałem mój post nagłówkami. thinkOfaNumber

Twoja odpowiedź

1   odpowiedź
1

Problemem tutaj (z moich doświadczeń w podobnych problemach) jestContent-Length.

Sprawdź, czy ustawiłeśContent-Length w dowolnej części kodu usuń go i będzie działać ponownie. Dlaczego ? ponieważ jeśli ustawiszContent-Length w nagłówku IIS nie może zmienić go na skompresowany, a dekompresja gzip nie powiedzie się. Dlaczego IIS nie zmieniają tego? ponieważ domyślnie, jeśli ustawisz nagłówek na IIS, ten nagłówek pozostanie i nie będzie mógł zostać zmieniony (szczególnie jeśli opróżnisz go wcześniej). Jest flaga, która pozwala IIS zmienić go po ustawieniu, ale lepiej jest go uniknąć.

Podobne pytania:Witryna ASP.NET czasami zamraża się i / lub wyświetla nieparzysty tekst w górnej części strony podczas ładowania, na serwerach z równoważeniem obciążenia

Aktualizacja

Z @thinkOfaNumber: Okazuje sięUżywałem kompresji devexpress oraz kompresji IIS. Wyłączyłem kompresję devexpress w web.config i działa!

Pokazano tutaj, że pierwsza kompresja ustawiaContent-Length a druga kompresja nie zmienia go, ponieważContent-Length jest zapisywane w nagłówku i nagłówku nie można zmienić * po jego ustawieniu, więc druga kompresja zmienia ostateczną skompresowaną stronę, co powoduje, że przeglądarka nie odczytuje jej poprawnie, a następnie nie dekompresuje jej poprawnie.

[*] Istnieje sposób na zmianę nagłówków po wysłaniu ich na IIS, a przed wysłaniem ich do przeglądarki, i można to zrobić poprzez zmianę domyślnego zachowania IIS, ale nie jest to takie proste i nie wiem, czy może rozwiązać ten problem.

dziwne ... Z zestawem kompresji i wykonaniem odświeżania ctrl w celu wyczyszczenia pamięci podręcznej przy każdym ładowaniu otrzymuję różne odpowiedzi:Content-Length 1728 a arkusz stylów jest spakowany i złamany,Content-Length 1297 a arkusz stylów jest spakowany i działa ... thinkOfaNumber
@thinkOfaNumber Lepiej zaakceptuj ten, ponieważ tak naprawdę mówię, że problemem jest podwójny kompres i nie można zmienić długości zawartości. Dlatego zaktualizowałem moje pytanie o twoje dane. Aristos
@thinkOfaNumber Możesz uzyskać inną długość, ponieważ gzip to dynamiczny kompres i może ta zmiana. Chodzi o to, aby nie ustawić go pro gramatycznie w kodzie. Aristos
@thinkOfaNumber może jakiś moduł to ustawił, a może jest jakoś podwójny kompres ... z dwóch różnych modułów. Aristos

Powiązane pytania