IIS 7, sıkıştırma için belirli MIME türlerini (ancak tümünü değil) neden yok sayıyor? Hata veriyor: DYNAMIC_COMPRESSION_NOT_SUCCESS - Sebep 12


11

Yani, bir IIS7 n00b biraz değilim ama eski IIS sistemlerinin çoğunu 3'e geri kullandım. Dinamik sıkıştırmayı açmaya çalışıyorum ve çoğunlukla çalışıyor. Toplu veya değil ADO.Net Veri Hizmeti (Astoria) istekleri için çalışmıyor.

Gerçekten yararlı olan başarısız istek (FREB) izleme bulundu . Ve isteksiz isteklerde gördüğüm şey Reason Code 12, NO_MATCHING_CONTENT_TYPE. Tamam, bu yüzden eşleşen MIME türü belirtilmedi, bu kolay.

Dışında bu benim web.config (ki doğru olduğunu düşünüyorum, ama belki değil) ne var.

<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" />

Şimdi bunun Accept: Gzip üstbilgisini içeren herhangi bir isteği sıkıştırması gerektiği anlamına geldiğini düşünüyorum. Burada başkalarının ne düşünebileceğini bilmek isterim.

Kemancı izim:

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 ***

1
ApplicationHost.config dosyasını düzenlemek için NOTEPAD KULLANIN. Birkaç saat önce boşa harcadım, notepad ++ 'da (Visual Studio 2010 editöründe !!) yaptığım değişiklikler IIS tarafından uygulanmadı. DynamicTypes / staticTypes koleksiyonuna ek mimeType eklemenin alternatif yolu appcmd kullanmaktır. "C:\Windows\System32\Inetsrv\Appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/javascript',enabled='True']" /commit:apphostVe tekrar: bu değişiklikler yapıldıktan sonra - bunları yalnızca not defterinde göreceksiniz. Notepad ++ (yanı sıra Visual Studio 2010 editörü !!)
Sasha

Alexander, burada ne söylediğini anladığımdan% 100 emin değilim, ancak IIS yapılandırmasını herhangi bir metin düzenleyicisiyle değiştirmenin gayet iyi çalıştığını söyleyebilirim. Ürün ağacı işaretçisi ekleyen bir düzenleyicide zorluk yaşayabilirsiniz, ancak bunun dışında iyi olmalıdır. Benim durumumda, not defterini düzenlemek için kullanamadım, sadece yanlış dosyayı düzenliyordum. Tüm yapılandırma değişiklikleri, uygulama web kökünde bulunan web.config dosyasında yapılamaz. Bazıları Sistem klasöründe appHost'a göre yapılmalıdır.
Peter Oehlert

6
@alexander: Doğru, 64-bit pencerelerde notepad ++ veya visual studio gibi 32-bit uygulamaları kullanmak, WOW64'ün System32 klasörü için dosya yönlendirmesini tetiklemesini sağlar. Düzenleme C: \ WINDOWS \ SysWOW64 içinde yalnızca 32 bit programlar tarafından görülebilen bir klon oluşturur ve 64 bit bir program olan IIS tarafından asla kullanılmaz
Fredrik Haglund

Not Defteri aslında çalışır ... Notepad ++ ve Visual Studio yönlendirilir.
Brian White

@FredrikHaglund Kutsal sigaralar. Bu açıklamayı kendi cevabına bir açıklama yaparak koymayı öneririm ... Böyle bir şeyin devam edeceği hakkında hiçbir fikrim yoktu ve yorumunuzu görmeseydim kuyruğumu daha uzun süre kovalardım. (Sorunu da dile getiren Sasha ve Brian White'a da
Beska

Yanıtlar:


7

Tamam, bunu web.config dosyasında yapılandıramayacağınız, yalnızca appHost.config dosyasında olacağı anlaşılıyor. Dokümanların appHost.config dediğini sanıyordum, ancak izin verilen tek yapılandırma konumu değil, genel bir kavramın bir belirtimi olduğunu varsaymıştım.


Doğru. system.webServer yapılandırması Web sitesi düzeyinde httpCompression'a izin vermez. Aynı şeyi root'ta, yani applicationhost.config dosyasında yapılandırabilirsiniz.
Vivek Kumbhar

hmm .. dokümanlar web.config düzeyinde uygulanabileceğini söyler - en alta kaydır: msdn.microsoft.com/en-us/library/ms690689(v=vs.90).aspx ve "Yapılandırma konumları" na bakın tablo .. Belgelerde bir sorun mu var?
avs099

@ avs099 Bilmiyorum. Bunu 3 yıl önce gönderdiğimde, eminim web.config ile başladım ve işe yaramadı b / c gönderdi. Belki bir yamadaki işlevsellik değişti ya da dokümanlar yanlış. Öğrenmek için test etmek iyi olurdu.
Peter Oehlert

1
oh - ben net değildi - belgeleri okumak gibi, httpCompression web.config kullanılabilir - diyor ama ben bunu almak mümkün değildi bu yüzden ben applicationHost.config dosyasını değiştirerek sona erdi. Bana göre dokümantasyon yanıltıcı. Cevabımı burada
SO'ya bağlayacağım

Cevabımı görün - varsayılan olarak, temiz bir IIS yüklemesi web.configsıkıştırma ayarlarının geçersiz kılmalarını kapatır , bu nedenle applicationHost.config. Sıkıştırma ayarlarını değiştirmek yerine, bunun yerine geçersiz kılmalara izin verebilirsiniz ve işinize geri döndünüz.
mcw

3

Peter, ipucu için teşekkürler - aynı zamanda

<add mimeType="application/atom+xml; charset=utf-8" enabled="true" />

bu <httpCompression>bölümde applicationHost.configdüzeltildi.

Ayrıca , sıkıştırma kodundaki bir hata nedeniyle kodlamayı belirtmek zorunda kaldık :

Sıkıştırma kodunda yanıt başlığındaki karakter kümesini doğru ayrıştırmadığından bir hata var, bu nedenle çalışması için dinamik sıkıştırma ayarlarında "application / xml; charset = utf-8" yapılandırmanız gerekir.

İşte ilgili bölümün tamamı

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="4" />
    <scheme name="deflate" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="4" />
    <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/atom+xml; charset=utf-8" enabled="true" />
        <add mimeType="*/*" enabled="false" />
    </dynamicTypes>
    <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/javascript" enabled="true" />
        <add mimeType="*/*" enabled="false" />
    </staticTypes>
</httpCompression>

3

Yeni bir kurulumdan, benim applicationHost.config(in %windir%\system32\inetsrv\config) ayarım şu şekildeydi:

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

... ve maalesef iyi sıkıştırma adayları olabilecek JSON ve diğer veri türlerini içermeyen varsayılan MIME türleri kümesi.

Bunu şu konuma geçiriyor:

<section name="httpCompression" overrideModeDefault="Allow" />

yapılandırmasını sağlayan httpCompressionaltında etiketi system.webServerskinTenimde etiketi web.config.

Bunu, httpCompressionbölümünü şu şekilde ayarlayarak onayladım applicationHost.config:

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <dynamicTypes>
        <add mimeType="*/*" enabled="false" />
    </dynamicTypes>
    <staticTypes>
        <add mimeType="*/*" enabled="false" />
    </staticTypes>
</httpCompression>

... ve şimdi sıkıştırmak istediğim tüm MIME türlerini ayarlayabilirim web.config.


Başarısız olan istek takibi bu sorunu gidermede
mcw

IIS8 + için bu hiç çalışmaz. IIS'nin yeni sürümlerinde httpCompressionöğeyi web.configdüz bir şekilde çalıştırma konusunda deneyiminiz var mı yoksa imkansız mı? Dokümanlar bir kabus - anlaşmanın resmi herhangi bir yerde ne olduğunu söylemiyor gibi görünüyor.
theyetiman

@theyetiman - Üzgünüm, IIS8 + ile hiç çalışmadım. İyi şanslar.
mcw

0

Powershell'den eksik mime türleri eklemek için aşağıdaki komutları kullanın:

Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -AtIndex 0 -Value @{mimeType='application/javascript'; enabled='True'}

Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -AtIndex 0 -Value @{mimeType='image/svg+xml'; enabled='True'}

Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -AtIndex 0 -Value @{mimeType='text/css'; enabled='True'}

IIS ilk eşleşmeyi yapıyor gibi göründüğü için mimeTypes sırasının önemli olduğunu unutmayın. Bu, joker karakterli mimeTypes (*), joker karakter içermeyen mimeTypes öğesinin altında olması gerektiği anlamına gelir. Bu nedenle */*, aşağıdaki herhangi bir giriş kullanılmayacağından mimeType öğesinin altta olduğundan emin olun

Düzenle:

IIS berbat, bu yüzden en iyi seçenek staticTypes'i temizlemek ve her şeyi tekrar doğru sırayla tekrar eklemektir:

Clear-WebConfiguration -Filter "//system.webServer/httpCompression/staticTypes/add" -PSPath 'IIS:\'

SetCompressionOfMimeType 'text/*' 'True'
SetCompressionOfMimeType 'application/javascript' 'True'
SetCompressionOfMimeType 'image/svg+xml' 'True'
SetCompressionOfMimeType 'text/css' 'True'
SetCompressionOfMimeType '*/*' 'False'


function SetCompressionOfMimeType($mimeType, $enabled){
    Write-Output "Setting compression for $mimeType to $enabled"
    Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -Value @{mimeType=$mimeType; enabled=$enabled}
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.