Tak więc jestem trochę IIS7 n00b, ale korzystałem z większości starych systemów IIS wracając do 3. Próbuję włączyć kompresję dynamiczną i działa ona głównie. Nie działa w przypadku moich żądań ADO.Net Data Service (Astoria), grupowych lub nie.
Znalazłem śledzenie nieudanego żądania (FREB), które było naprawdę pomocne. I to, co widzę w niezakończonych żądaniach, to Reason Code 12, NO_MATCHING_CONTENT_TYPE
. OK, więc nie mam określonego typu MIME, to proste.
Z wyjątkiem tego, co mam w pliku web.config (który moim zdaniem jest poprawny, ale może nie).
<httpCompression dynamicCompressionDisableCpuUsage="100"
dynamicCompressionEnableCpuUsage="100"
noCompressionForHttp10="false"
noCompressionForProxies="false"
noCompressionForRange="false"
sendCacheHeaders="true"
staticCompressionDisableCpuUsage="100"
staticCompressionEnableCpuUsage="100">
<dynamicTypes>
<clear/>
<add mimeType="*/*"
enabled="true" />
</dynamicTypes>
<staticTypes>
<clear/>
<add mimeType="*/*"
enabled="true" />
</staticTypes>
</httpCompression>
<urlCompression doDynamicCompression="true"
doStaticCompression="true"
dynamicCompressionBeforeCache="false" />
Teraz myślę, że oznacza to, że powinien kompresować każde żądanie zawierające nagłówek Accept: Gzip. Chciałbym wiedzieć, co mogą tu myśleć inni.
Mój ślad skrzypka:
GET /SecurityDataService.svc/GetCurrentAccount HTTP/1.1
Accept-Charset: UTF-8
Accept-Language: en-us
dataserviceversion: 1.0;Silverlight
Accept: application/atom+xml,application/xml
maxdataserviceversion: 1.0;Silverlight
Referer: http://sdev03/apptestpage.aspx
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.5.30729; InfoPath.2; .NET CLR 3.0.30729; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)
Host: sdev03
Connection: Keep-Alive
Cookie: .ASPXAUTH=<snip>
HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Type: application/atom+xml;charset=utf-8
Server: Microsoft-IIS/7.0
DataServiceVersion: 1.0;
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Mon, 22 Mar 2010 22:29:06 GMT
Content-Length: 2726
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
*** <snip> removed ***
iis-7
configuration
compression
Peter Oehlert
źródło
źródło
"C:\Windows\System32\Inetsrv\Appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/javascript',enabled='True']" /commit:apphost
I znowu: po wprowadzeniu tych zmian - zobaczysz je tylko w notatniku. Notepad ++ (oraz edytor Visual Studio 2010 !!)Odpowiedzi:
OK, okazuje się, że nie można tego skonfigurować w pliku web.config, tylko appHost.config. Przypuszczałem, że doktorzy powiedzieli appHost.config, ale założyłem, że była to specyfikacja ogólnej koncepcji, a nie jedyna dozwolona lokalizacja konfiguracji.
źródło
web.config
nadpisywanie ustawień kompresji, dlatego musisz zmodyfikowaćapplicationHost.config
. Zamiast jednak zmieniać tam ustawienia kompresji, możesz po prostu zezwolić na zastąpienie i wrócisz do pracy.Peter, dzięki za podpowiedź - znaleźliśmy również to ustawienie
w
<httpCompression>
sekcjiapplicationHost.config
naprawiono to.Musieliśmy również określić kodowanie z powodu błędu w kodzie kompresji:
Oto pełna sekcja w całości
źródło
Po nowej instalacji mój
applicationHost.config
(in%windir%\system32\inetsrv\config
) miał następujące ustawienie:... a także domyślny zestaw typów MIME do kompresji, który niestety nie obejmuje JSON i innych typów danych, które byłyby dobrymi kandydatami na kompresję.
Przełączam na:
włącza konfigurację
httpCompression
tagu podsystem.webServer
tagiem w moimweb.config
.Potwierdziłem to, ustawiając
httpCompression
sekcjęapplicationHost.config
na:... a teraz mogę ustawić wszystkie typy MIME, które chcę skompresować w pliku
web.config
.źródło
httpCompression
elementu naweb.config
poziomie w nowszych wersjach IIS, czy jest to niemożliwe? Dokumenty to koszmar - wydaje się, że nie mówi się o oficjalnej umowie.Aby dodać brakujące typy mimetyczne z programu PowerShell, użyj następujących poleceń:
Zauważ, że kolejność typów mimeTypes jest ważna, ponieważ IIS wydaje się przyjmować pierwsze dopasowanie. Oznacza to, że mimeTypes z symbolami wieloznacznymi (*) powinien znajdować się poniżej mimeTypes bez symboli wieloznacznych. Dlatego upewnij się, że mimeType
*/*
znajduje się na dole, ponieważ jakikolwiek wpis poniżej nie będzie używanyEdytować:
Usługi IIS są do bani, więc najlepszą opcją jest po prostu wyczyszczenie staticTypes i dodanie wszystkiego z powrotem w prawidłowej kolejności:
źródło