Próbuję skonfigurować ustawienia kompresji IIS7 w pliku web.config. Próbuję włączyć gzip do żądań HTTP 1.0.
MSDN ma tutaj wszystkie informacje na ten temat .
Czy jest możliwe umieszczenie tych informacji konfiguracyjnych w pliku web.config mojej witryny? Czy muszę ustawić go na poziomie aplikacji? Obecnie mam ten kod w moim web.config ...
<system.webServer>
<urlCompression
doDynamicCompression="true"
dynamicCompressionBeforeCache="true" />
<httpCompression
cacheControlHeader="max-age=86400"
noCompressionForHttp10="False"
noCompressionForProxies="False"
sendCacheHeaders="true" />
... other stuff snipped ...
</system.webServer>
To nie działa :( Żądania HTTP 1.1 są kompresowane, tylko nie 1.0.
Ta strona MSDN powyżej mówi, że można jej użyć w:
- Machine.config
- ApplicationHost.config
- Aplikacja root Web.config
- Aplikacja Web.config
- Katalog Web.config
Czy możemy zatem ustawić te ustawienia dla poszczególnych witryn, programowo w pliku web.config? (jest to plik Web.config aplikacji ...) Co zrobiłem źle?
Twoje zdrowie :)
EDYCJA: Zostałem zapytany, skąd wiem, że HTTP1.0 nie jest kompresowany. Korzystam z reguł śledzenia nieudanych żądań, które zgłaszają:
DYNAMIC_COMPRESSION_START
DYNAMIC_COMPRESSION_NOT_SUCESS
Reason: 3
Reason: NO_COMPRESSION_10
DYNAMIC_COMPRESSION_END
źródło
appcmd
do ustawienia ustawień na poziomie aplikacji (co jest prawdopodobnie znacznie łatwiejsze).Po kilku badaniach jest domyślnie „zablokowany” na poziomie aplikacji. Jako taki musi zostać „odblokowany”. można to osiągnąć za pomocą wiersza polecenia lub (dodatkowe pobieranie) narzędzi administracyjnych iis7.
na przykład.
appcmd set config -section:urlCompression /doDynamicCompression:true
Refrences:
źródło
W jaki sposób testujesz, czy żądania HTTP1.0 nie są kompresowane? Czy to możliwe, że klient, którego używasz, nie informuje serwera, że może zaakceptować skompresowaną odpowiedź?
Jeśli widzisz nagłówki wysłane przez klienta (przedstawione przez samego klienta testowego, używając Firebug lub podobnego narzędzia, jeśli testujesz w Firefoksie lub IEHTTPHeaders, jeśli testujesz w IE, lub poprzez wąchanie ruchu za pomocą zewnętrznego narzędzia), powinieneś zobaczyć coś takiego
gdzieś tam. Jeśli klient nie poinformuje serwera, że może zaakceptować skompresowaną odpowiedź, serwer nie wyśle jej bez względu na inne ustawienia, które masz po stronie serwera.
Innym problemem może być testowanie przez serwer proxy, który sam się zidentyfikował. W takim przypadku ustawienie noCompressionForProxies może mieć pierwszeństwo i blokować możliwość skompresowanej odpowiedzi.
Należy zauważyć, że niektórzy klienci i serwery proxy, które wysyłają żądania HTTP1.0 (zwykle starsze oprogramowanie) nie będą poprawnie obsługiwały skompresowanej odpowiedzi, jeśli ją otrzymają, więc jeśli włączysz kompresję odpowiedzi na żądania HTTP1.0, upewnij się, że przetestuj swoją witrynę / aplikację we wszystkich programach klienckich / proxy, których oczekują użytkownicy / użytkownicy. Jest to mniejszy problem, jeśli możesz zagwarantować, że twoi odbiorcy będą używać określonego oprogramowania (jeśli na przykład aplikacja jest przeznaczona tylko do wewnętrznej sieci korporacyjnej), ale w przeciwnym razie istnieje wiele kombinacji do przetestowania, dlatego większość serwerów wyłącza kompresję dla 1.0 wniosków całkowicie.
źródło