Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: Internet Information Services 6.0, Internet Information Services 7.0 ve sonraki sürümleri
Genel Bakış
IIS 6 veya 7 web uygulamalarınız için HTTP Sıkıştırma'nın etkinleştirilmesi, site performansını artırmanın bir yoludur.
IIS'yi tamamen yönetmek için gereken sıkıştırma özelliklerinin çoğu yönetici GUI'sinin kullanımına sunulmaz. Yalnızca bir açma veya kapatma düğmesi sunar. Bu nedenle, HTTP sıkıştırmasını tamamen etkinleştirmek için, metabase.xml dosyasını güncelleştirmek için IIS Yöneticisi dışında bir araç kullanmanız gerekir. Kullanılan en yaygın araç, IIS yükleme dizinine dahil edilen adsutil.vbs aracıdır.
Bu makale sıkıştırmayı yapılandırmanıza yardımcı olur ve IIS sıkıştırmasının IIS 6 ve IIS 7.x'te çalışmama nedenlerinin yaygın nedenlerini tanımlar.
Bu sorun gidericide kullanılan araçlar
- Fiddler
- İşlem İzleyicisi
- Metatabanı ACL'si
- IIS 7 FREB izlemesi
Doğrulama
Sıkıştırmanın çalışıp çalışmadığını belirleme
IIS sunucusunun sıkıştırılmış yanıt gönderip göndermediğini belirlemenin tek yolu, istemci isteğinin ve sunucu yanıtının ağ izlemesini analiz etmektir. İstemciden gelen istek aşağıdaki HTTP İstek Üst Bilgisini içermelidir:
HTTP: Accept-Encoding =gzip, deflate
Bu, sunucunun istemcinin sıkıştırılmış bir yanıt almaya istekli olduğunu ve sıkıştırmayı desteklediğini bilmesini sağlar. Buna karşılık, sunucudan sıkıştırılmış bir yanıt aşağıdaki HTTP Yanıt üst bilgisini ve bir değeri içerir:
HTTP: Content-Encoding = gzip
Aşağıdaki ekran görüntüleri, sıkıştırma çalışmadığında Fiddler aracının çıkışını gösterir:
Sıkıştırma sorunlarını giderme
Sıkıştırma sorunlarını gidermek için aşağıdaki adımları gerçekleştirin:
IIS 6 veya IIS 7'de Sıkıştırma'yı etkinleştirin.
IIS Yöneticisi'nden Web Siteleri düğümüne sağ tıklayın, Özellikler'i ve ardından Hizmetler'i seçin.
Sıkıştırma klasörünü ve izinlerini belirtin.
IIS, sıkıştırılmış dosyaları yapılandırılabilir bir klasörde depolar. Varsayılan olarak,
%windir%\IIS Temporary Compressed Files
IIS 6 ve%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files
IIS 7 içindir.IIS_WPG(IIS 7 için IIS_IURS) bu klasör için tam denetim iznine sahip olmalıdır. Bu tür bir izin sorununu gidermek için İşlem İzleyicisi'ni kullanın.
sıkıştırmanın Metabase.xml etkinleştirilip etkinleştirilmediğini denetleyin.
Doğru düğümlerdeki metatabanında sıkıştırma açık değildir. Sıkıştırma yapılandırması için üç metatabanı düğümü vardır:
w3svc/filters/compression/parameters
w3svc/filters/compression/gzip
w3svc/filters/compression/deflate
Düğümü yapılandırmak
/parameters
zorunludur. Ardından, düğüm veya/deflate
her ikisini de yapılandırabilirsiniz/gzip
. Bu, yalnızca gzip, deflate veya parametre düğümlerini yapılandırmanın çalışmayacağı anlamına gelir. ve/gzip
düğümlerini/parameters
yapılandırdığınızda Gzip sıkıştırma düzeni etkinleştirilir. ve/deflate
düğümlerini/parameters
yapılandırdığınızda Sıkıştırma düzeninin söndürilmesi etkinleştirilir. Son olarak, üç düğümü de yapılandırdığınızda hem GZip sıkıştırması hem de Sıkıştırmayı söndür seçeneği etkinleştirilir.IIS 6 için metatabanı iznini denetleyin.
Varsayılan olarak,
IIS_WPG
için Okuma, Güvenli Olmayan Okuma, Numaralandırma Anahtarları ve Yazma izinlerine sahiptir/LM/W3SVC/Filters
.İzinler beklenmeyen bir değişiklik nedeniyle kaldırıldıysa veya güvenlik sağlamlaştırıldıysa IIS sıkıştırmayı başlatamaz.
IIS 6 metatabanı ACL'sini doğrulamak ve değiştirmek için metaacl.vbs kullanın. Daha fazla bilgi için bkz . Varsayılan Metatabanı ACL'si.
Uygulama havuzu kimliğinin (veya
IIS_WPG
genel olarak grubun) metatabanı anahtarı W3SVC veya Filtreler'e Okuma ve Yazma erişimi yoksa, hata koşuluCOMPRESSION_DISABLED
Bir Windows için Kurumsal İzleme (ETW) izlemesinde günlüğe kaydedilir.ETW İzleme
IISCompression: STATIC_COMPRESSION_NOT_SUCCESS - IIS has been unsuccessful doing static compression Reason: COMPRESSION_DISABLED
Metabase.xml dinamik veya statik sıkıştırmanın kapalı olup olmadığını denetleyin.
Üç yapılandırma düğümünün (
/parameters
,/gzip
ve/deflate
) her birinde statik ve/veya dinamik sıkıştırmayı etkinleştirme seçeneğiniz vardır. .txt ve .html gibi dosya türleri için statik sıkıştırmayıHcDoStaticCompression
etkinleştirmek için anahtarı1
(veyaTRUE
) olarak ayarlamanız gerekir. .asp, .aspx, .asmx veya .exe gibi dosya türleri için dinamik sıkıştırmayıHcDoDynamicCompression
etkinleştirmek için anahtarı1
(veyaTRUE
) olarak ayarlamanız gerekir.Örneğin, düğümde
/parameters
dinamik sıkıştırma ayarlamak için adsutil.vbs kullanarak aşağıdaki komutu çalıştırın:cscript.exe adsutil.vbs SET w3svc/filters/compression/parameters/HcDoDynamicCompression TRUE
Önceki komutun çıktısı şöyle görünür:
HcDoDynamicCompression : (BOOLEAN) True
IIS7'de
<system.webServer> <urlCompression doStaticCompression="true" doDynamicCompression="true" /> </system.webServer>
Sıkıştırmak istediğiniz dosya türünün ve
/deflate
düğümlerindeki uygun Dosya Uzantıları bölümlerinde/gzip
listelenip listelenmediğini denetleyin.ve/veya
HcDoStaticCompression
anahtarlarıyla sıkıştırmayı etkinleştirdikten sonra, gerçekte hangi dosya türlerininHcDoDynamicCompression
sıkıştırılması gerektiğini belirtin. STATIK sıkıştırma varsayılan olarak .htm, .html ve .txt gibi dosya türlerini kullanır ve DINAMIK sıkıştırma .asp, .dll ve .exe kullanır. .aspx gibi farklı dosya türlerini sıkıştırmak istiyorsanız, kullandığınız sıkıştırma türüne bağlı olarak ve veya/deflate
düğümlerindeki/gzip
uygun dosya uzantısı bölümüne ekleyin. Statik dosya sıkıştırma (.html, txt ve xml gibi) için dosya uzantılarını özelliğineHcFileExtensions
ekleyin. Dinamik sıkıştırma için (.asp, .aspx ve .asmx gibi) özelliğineHcScriptFileExtension
ekleyin.Statik dosyalar için
adsutil.vbs SET w3svc/filters/compression/gzip/HcFileExtensions "htm" "html" "txt"
adsutil.vbs GET w3svc/filters/compression/gzip/HcFileExtensions
Önceki komut aşağıdaki çıkışı gösterir:
HcFileExtensions : (LIST) (3 Items) "htm" "html" "txt"
Dinamik dosyalar için
adsutil.vbs SET w3svc/filters/compression/gzip/HcScriptFileExtensions "asp" "dll" "exe" "aspx" adsutil.vbs get w3svc/filters/compression/gzip/HcScriptFileExtensions
Önceki komut aşağıdaki çıkışı gösterir:
HcFileExtensions : (LIST) (4 Items) "asp" "dll" "exe" "aspx"
IIS7'de
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" minFileSizeForComp="1000"> <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" /> <staticTypes> <add mimeType="text/*" enabled="true" /> <add mimeType="message/*" enabled="true" /> <add mimeType="application/x-javascript" enabled="true" /> <add mimeType="application/atom+xml" enabled="true" /> <add mimeType="application/xaml+xml" enabled="true" /> <add mimeType="*/*" enabled="false" /> </staticTypes> <dynamicTypes> <add mimeType="text/*" enabled="true" /> <add mimeType="message/*" enabled="true" /> <add mimeType="application/x-javascript" enabled="true" /> <add mimeType="*/*" enabled="false" /> </dynamicTypes> </httpCompression> <system.web.extensions> <scripting> <scriptResourceHandler enableCompression="false" /> </scripting> </system.web.extensions>
Not
veya
HcScriptFileExtensions
özelliklerini doğru söz dizimi ile yapılandırmanızHcFileExtensions
gerekir. Sondaki boşluklar veya gereksiz tırnak işaretleri veya satır başı, özelliğin yanlış yapılandırılmasına neden olur. Ne yazık ki, fazladan alan eklerseniz adsutil.vbs bir hata göstermez, bu nedenle çok dikkatli olmanız gerekir. Ayrıca, değerleri bir komut istemine veya metabase.xml dosyasına (metatabanı doğrudan düzenleme) kopyalayamaz veya yapıştıramazsınız ve el ile yazmalısınız.Sıkıştırmanın ana düzeyde ayarlandığını, ancak alt düzeydeki bir ayar tarafından geçersiz kılınmadığını denetleyin.
Sıkıştırma düzeyi etkinleştirilmiş
w3svc/filters/compression
olabilir. Ancak, web sitesi veya uygulama düzeyinde bir ayar tarafından geçersiz kılınıyor olabilir.Örneğin, düzeyi olarak ayarladıysanız
HcDoDynamicCompression
TRUE
w3svc/filters/compression
ve varsayılan web sitesi için olarak ayarlandıysaFALSE
, varsayılan webDoDynamicCompression
sitesi isteklerine yanıtlar için dinamik sıkıştırma gerçekleşmez.Bir virüsten koruma programının sıkıştırılmış dosyaların kaydedildiği dizini taramış olup olmadığını denetleyin.
IIS çalıştıran bir sunucuda sıkıştırma etkinleştirildiğinde ve IIS sıkıştırma dizininden bir HTTP isteği sunulduğunda, beklenen dosya yerine 0 baytlık bir dosya döndürülebilir.
Not
Bu belirtileri yalnızca HTTP Statik Sıkıştırma etkinse görebilirsiniz.
Bunun nedeni, IIS sunucusunda çalışan bir virüsten koruma yazılımının IIS sıkıştırma dizinini taramasıdır.
Bu nedenle, IIS sıkıştırma dizinini virüsten koruma yazılımının tarama listesinden dışlamanız gerekir.
İstenen URL'nin, yürütülen DLL dosyasına geçirilen parametrelerin bir parçası olarak eğik çizgi içerip içermediğini denetleyin.
ISAPI filtrelerinin istek veya yanıt üst bilgilerini değiştirip değiştirmediğini denetleyin.
GÖNDERME işlemini bir ISAPI yapıyor ve varlıkla birlikte tüm HTTP üst bilgileri kümesini adresine
HTTP_COMPRESSION::DoDynamicCompression
göndermiyor.DoDynamicCompression
ISAPI'den tüm verileri almadığından yanıtı sıkıştıramıyoruz. Üçüncü taraf ve/veya Microsoft dışı ISAPI'lerin, üst bilgileri HTTP üst bilgileri için amaçlanmış işlevde varlık gövdesine veya varlık gövdesine yönelik işleve yerleştirerek veya herhangi bir üst bilgi sağlamayarak yaptığı görülmüştür. Bu durumda, ISAPI filtresi SF_NOTIFY_SEND_RESPONSE veya AddResponseHeaders veya dinamik sıkıştırma başarısız olur. ISAPI'nin üst bilgileri ve varlığı sırasıyla doğru konumlara yerleştirmesi gerekir.Yanıt durum kodunun 200'den farklı bir şey olup olmadığını denetleyin. IIS 6 veya 7'de yalnızca HTTP 200 durumuna sahip yanıtlar sıkıştırılır.
Durum kodları 200'den farklı olan yanıt sıkıştırılmaz. Aynı başarıya ulaşmak için bir
HTTPModule
yazmanız gerekir.İsteğin bir
Via: header
Via headers
içerip içermediğini denetleyin, isteğin bir ara sunucu aracılığıyla IIS'ye geldiğini gösterir.Çoğu proxy sıkıştırma üst bilgisini doğru işlemez ve istemcilere olması gereken durumlarda sıkıştırılmış veriler sağlamaz. Bu nedenle, isteğin Via üst bilgisi olduğunda, sıkıştırılmış yanıtlara varsayılan olarak izin verilmez. Metatabanı anahtarını olarak
True
ayarlayarakHcNoCompressionForProxies
bunu geçersiz kılabilirsiniz.İsteğin statik bir sayfaya yönelik olup olmadığını ve yanıtın belge alt bilgisi içerip içermediğini denetleyin. Belge alt bilgileri statik sıkıştırmanın başarısız olmasına neden olur.
Statik sıkıştırmanın çalışıp çalışmadığından denetleyin. IIS'de kök düzeyinde bir joker uygulama eşlemesi yüklüyse bu durum oluşabilir. Örneğin, sunucudaki .html veya .txt uzantıları için uygulama eşlemelerimiz var ve bu, IIS'nin .txt isteklerinizi statik değil dinamik istekler olarak değerlendirmesine neden olur ve .txt dinamik sıkıştırma listesinde bir uzantı olmadığından sıkıştırılamaz.
IIS Sıkıştırma ve
Accept-Encoding: identity
alanının mevcut olup olmadığını denetleyin.RFC2616 başına, istekte bir
Accept-Encoding
alan varsa ve sunucu üst bilgisine göreAccept-Encoding
kabul edilebilir bir yanıt gönderemiyorsa, sunucu 406 (Kabul Edilemez) durum koduyla bir hata yanıtı göndermelidir. İstekte alan yoksaAccept-Encoding
, sunucu istemcinin herhangi bir içerik kodlamasını kabul ettiğini varsayabilir. Bu durumda, "kimlik" kullanılabilir içerik kodlarından biriyse, farklı bir içerik kodunun istemci için anlamlı olduğu konusunda ek bilgiler olmadığı sürece sunucu "kimlik" içerik kodunu kullanmalıdır.IIS sıkıştırma sorununu gidermek için ETW izlemesi kullanıp kullanmadığınızdan denetleyin.
Windows için Olay İzleme (ETW), Windows işletim sisteminin HTTP istekleriyle ilgili sorunları gidermenize olanak tanıyan bir özelliğidir.
IIS sıkıştırma sorununu giderme adımları şunlardır.
IISProviders.txt adlı bir metin dosyası oluşturun ve dosyaya takip içeriği yerleştirin." IIS: WWW Server" sağlayıcı adıdır, 0xFFFFFFFE tüm olaylar için izleme, 5 ise ayrıntılı düzey anlamına gelir.
Bir komut istemi açın ve aşağıdaki komutu çalıştırın.
logman start trace compressionTrace -pf IISProviders.txt -ets
Sorunu yeniden oluşturun.
İzlemeyi durdurmak için aşağıdaki komutu çalıştırın.
logman stop trace compressionTrace -ets
İzlemeyi metin dosyasına dönüştürün.
İzleme raporu, ikili izleme verilerini metne dönüştürür ve komutunu çalıştırdığınız
tracerpt
dizinde iki dosya oluşturur:tracerpt compressionTrace.etl
Summary.txt, hangi sağlayıcıların kullanıldığı da dahil olmak üzere izleme oturumuyla ilgili genel ayrıntıları içerir.
DumpFile.csv, gerçek izleme verilerini metin biçiminde içerir.
Yararlı bilgileri bulmak için izleme dosyasını okuyun. dumpfile.csv açın ve COMPRESSION_NOT_SUCCESS gibi bir anahtar sözcük bulun. Bir örnek aşağıda verilmiştir:
IISCompression, STATIC_COMPRESSION_NOT_SUCCESS, 0x000008B0, 129744354075770195, 0, 0, {00000000-0000-0000-0700-0060000000bd}, "NO_MATCHING_SCHEME", 0, 0
Bu hata NO_MATCHING_SCHEME, bu uzantı veya Accept-Encoding için sıkıştırma düzeni eşleşmeleri olmadığı anlamına gelir. Sıkıştırma hatalarının ayrıntılı listesi için bkz . Sıkıştırma hataları listesi.
IIS sıkıştırma sorununu gidermeye yönelik FREB izlemesinin kullanılıp kullanılmadiğini denetleyin.
Ayrıntılı adımlar için bkz . IIS 7'de İzleme Kullanarak Başarısız İsteklerde Sorun Giderme.
Sıkıştırma sorunlarını gidermek için IIS 7 FREB izlemesini kullanma örneği aşağıda verilmiştır.
Sıkıştırma hataları listesi
Sıkıştırma hatalarının ayrıntılı listesi için aşağıdaki tabloya bakın.
Not
Aşağıdaki nedenler hem IIS 6 hem de IIS 7 için geçerlidir.
Neden | Açıklama |
---|---|
NO_ACCEPT_ENCODING | İstemci tarafından gönderilen Accept-Encoding yok. |
COMPRESSION_DISABLED | uygun yapılandırma bulunamadığından sıkıştırma devre dışı bırakıldı. |
NO_COMPRESSION_10 | Sunucu 1.0 isteklerini sıkıştıracak şekilde yapılandırılmadı. |
NO_COMPRESSION_PROXY | Sunucu, ara sunucu isteklerini sıkıştıracak şekilde yapılandırılmadı. |
NO_MATCHING_SCHEME | Bu uzantı/Accept-Encoding için sıkıştırma düzeni eşleşmez. |
UNKNOWN_ERROR | Bilinmeyen hata. |
NO_COMPRESSION_RANGE | Sunucu aralık isteklerini sıkıştıracak şekilde yapılandırılmadı |
FILE_TOO_SMALL | Sıkıştırma eşiğinden küçük dosya. |
FILE_ENCRYPTED | Dosya şifrelenir. |
COMPRESS_FILE_NOT_FOUND | Sıkıştırılmış kopya yok. |
COMPRESS_FILE_STALE | Sıkıştırılmış kopya güncel değil. |
NO_MATCHING_CONTENT_TYPE | Sunucu, bu uzantı için content-Type'ı sıkıştıracak şekilde yapılandırılmadı. |
HEADERS_SENT_TWICE | Aynı yanıt için iki kez gönderilen üst bilgiler. |
NO_HEADER_SENT | Varlık gövdesi göndermeden önce Üst Bilgi gönderilmedi. |
NOT_SUCCESS_STATUS | Yanıt durum kodu başarılı değil (200). |
ALREADY_CONTENT_ENCODING | Yanıtta zaten bir içerik kodlaması var. |
Not
Aşağıdaki nedenler yalnızca IIS 7 için geçerlidir.
Neden | Açıklama |
---|---|
FOOTER_ENABLED | Statik dosyalar için belge alt bilgisi etkinleştirildi. |
NOT_FREQUENTLY_HIT | URL sıkıştırmayı gerekçelendirmek için yeterince sık istenmedi. |
FAIL_TO_COMPRESS | Sıkıştırılmış kopya oluşturulamadı. |