Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: Internetinformationsdienste 6.0, Internetinformationsdienste 7.0 und höhere Versionen
Übersicht
Das Aktivieren der HTTP-Komprimierung für Ihre IIS 6- oder 7-Webanwendungen ist eine Möglichkeit, die Websiteleistung zu erhöhen.
Viele der zum vollständigen Verwalten von IIS erforderlichen Komprimierungseigenschaften werden von der Administrator-GUI nicht verfügbar gemacht. Es bietet lediglich einen Ein- oder Ausschalter. Um die HTTP-Komprimierung vollständig zu aktivieren, müssen Sie also ein anderes Tool als den IIS-Manager verwenden, um die metabase.xml Datei zu aktualisieren. Das am häufigsten verwendete Tool ist adsutil.vbs, das im IIS-Installationsverzeichnis enthalten ist.
Dieser Artikel hilft Ihnen beim Konfigurieren der Komprimierung und identifiziert häufige Gründe für die IIS-Komprimierung möglicherweise nicht in IIS 6 und IIS 7.x.
In dieser Problembehandlung verwendete Tools
- Fiddler
- Prozessmonitor
- Metabase ACL
- IIS 7 FREB-Ablaufverfolgung
Überprüfung
Ermitteln, ob die Komprimierung funktioniert
Die einzige Möglichkeit, zu bestimmen, ob der IIS-Server eine komprimierte Antwort gesendet hat, besteht darin, eine Netzwerkablaufverfolgung der Clientanforderung und Serverantwort zu analysieren. Die Anforderung vom Client muss den folgenden HTTP-Anforderungsheader enthalten:
HTTP: Accept-Encoding =gzip, deflate
Dadurch wird dem Server mitgeteilt, dass der Client bereit ist, eine komprimierte Antwort zu erhalten und die Komprimierung zu unterstützen. Im Gegenzug enthält eine komprimierte Antwort des Servers den folgenden HTTP Response-Header und einen Wert:
HTTP: Content-Encoding = gzip
Die folgenden Screenshots zeigen die Ausgabe des Fiddler-Tools, wenn die Komprimierung nicht funktioniert:
Behandeln von Komprimierungsproblemen
Führen Sie die folgenden Schritte aus, um Komprimierungsprobleme zu beheben:
Aktivieren der Komprimierung in IIS 6 oder IIS 7.
Klicken Sie im IIS-Manager mit der rechten Maustaste auf den Knoten "Websites", wählen Sie "Eigenschaften" und dann "Dienste" aus.
Geben Sie komprimierungsordner und -berechtigungen an.
IIS speichert komprimierte Dateien in einem Ordner, der konfiguriert werden kann. Standardmäßig ist
%windir%\IIS Temporary Compressed Fileses für IIS 6 und%SystemDrive%\inetpub\temp\IIS Temporary Compressed Filesfür IIS 7 vorgesehen.IIS_WPG (IIS_IURS für IIS 7) muss die volle Kontrollberechtigung für diesen Ordner haben. Verwenden Sie "Prozessüberwachung" , um diese Art eines Berechtigungsproblems zu beheben.
Überprüfen Sie, ob die Komprimierung in Metabase.xml aktiviert ist.
Die Komprimierung ist in der Metabasis auf den rechten Knoten nicht aktiviert. Es gibt drei Metabasisknoten für die Komprimierungskonfiguration:
w3svc/filters/compression/parametersw3svc/filters/compression/gzipw3svc/filters/compression/deflate
Das Konfigurieren des
/parametersKnotens ist obligatorisch. Anschließend können Sie entweder/gzipoder Knoten oder/deflatebeides konfigurieren. Dies bedeutet, dass das Konfigurieren nur der Gzip-, Deflate- oder Parameterknoten nicht funktioniert. Wenn Sie die Komprimierungsschema und/gzipdie/parametersKnoten konfigurieren, wird das Gzip-Komprimierungsschema aktiviert. Wenn Sie die/parametersUnd-Knoten/deflatekonfigurieren, wird das Deflate-Komprimierungsschema aktiviert. Wenn Sie schließlich alle drei Knoten konfigurieren, wird sowohl die GZip-Komprimierung als auch die Deflate-Komprimierung aktiviert.Überprüfen Sie die Metabasisberechtigung für IIS 6.
Standardmäßig
IIS_WPGverfügt über Lese-, Unsecure Read-, Enumerate Keys- und Write-Berechtigungen für die/LM/W3SVC/Filters.IIS kann die Komprimierung nicht initialisieren, wenn die Berechtigungen aufgrund unerwarteter Änderungen entfernt wurden oder wenn die Sicherheit härter wird.
Verwenden Sie metaacl.vbs zum Überprüfen und Ändern der IIS 6-Metabasis-ACL. Weitere Informationen finden Sie unter Standardmetabasis-ACL.
Wenn die Anwendungspoolidentität (oder die
IIS_WPGGruppe im Allgemeinen) keinen Lese- und Schreibzugriff auf den Metabasisschlüssel W3SVC oder Filter hat, wird eine FehlerbedingungCOMPRESSION_DISABLEDin einer ETW-Ablaufverfolgung (Enterprise Tracing for Windows) protokolliert.ETW-Ablaufverfolgung
IISCompression: STATIC_COMPRESSION_NOT_SUCCESS - IIS has been unsuccessful doing static compression Reason: COMPRESSION_DISABLEDÜberprüfen Sie, ob die dynamische oder statische Komprimierung in Metabase.xml deaktiviert ist.
Bei jedem der drei Konfigurationsknoten (
/parametersund/deflate) haben Sie die Möglichkeit,/gzipstatische und/oder dynamische Komprimierung zu aktivieren. Um die statische Komprimierung für Dateitypen wie .txt und .html zu aktivieren, müssen Sie denHcDoStaticCompressionSchlüssel auf1(oderTRUE) festlegen. Um die dynamische Komprimierung für Dateitypen wie .asp, .aspx, ASMX oder .exe zu aktivieren, müssen Sie denHcDoDynamicCompressionSchlüssel auf1(oderTRUE) festlegen.Um beispielsweise die dynamische Komprimierung am
/parametersKnoten festzulegen, führen Sie den folgenden Befehl mithilfe von adsutil.vbs aus:cscript.exe adsutil.vbs SET w3svc/filters/compression/parameters/HcDoDynamicCompression TRUEDie Ausgabe des vorherigen Befehls sieht wie folgt aus:
HcDoDynamicCompression : (BOOLEAN) TrueIn IIS7
<system.webServer> <urlCompression doStaticCompression="true" doDynamicCompression="true" /> </system.webServer>Überprüfen Sie, ob der dateityp, den Sie komprimieren möchten, in den entsprechenden Abschnitten der Dateierweiterungen auf den
/gzipUnd/deflateKnoten aufgeführt ist.Nachdem Sie die Komprimierung mit den
HcDoDynamicCompressionUnd/oderHcDoStaticCompressionSchlüsseln aktiviert haben, geben Sie an, welche Dateitypen tatsächlich komprimiert werden müssen. Die STATISCHE Komprimierung verwendet standardmäßig Dateitypen wie .htm, .html und .txt und DYNAMISCHE Komprimierung .asp, .dll und .exe. Wenn Sie unterschiedliche Dateitypen komprimieren möchten, z. B. .aspx, fügen Sie sie abhängig vom verwendeten Komprimierungstyp dem entsprechenden Abschnitt der Dateierweiterung in den/gzipUnd-oder-Knoten/deflatehinzu. Fügen Sie bei der statischen Dateikomprimierung (z. B. .html, txt und xml) die Dateierweiterungen zurHcFileExtensionsEigenschaft hinzu. Fügen Sie sie für die dynamische Komprimierung (z. B. .asp, .aspx und ASMX) derHcScriptFileExtensionEigenschaft hinzu.Für statische Dateien
adsutil.vbs SET w3svc/filters/compression/gzip/HcFileExtensions "htm" "html" "txt"adsutil.vbs GET w3svc/filters/compression/gzip/HcFileExtensionsDer vorherige Befehl zeigt die folgende Ausgabe:
HcFileExtensions : (LIST) (3 Items) "htm" "html" "txt"Für dynamische Dateien
adsutil.vbs SET w3svc/filters/compression/gzip/HcScriptFileExtensions "asp" "dll" "exe" "aspx" adsutil.vbs get w3svc/filters/compression/gzip/HcScriptFileExtensionsDer vorherige Befehl zeigt die folgende Ausgabe:
HcFileExtensions : (LIST) (4 Items) "asp" "dll" "exe" "aspx"In IIS7
<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>Notiz
Sie müssen die
HcFileExtensionsEigenschaften mitHcScriptFileExtensionsder richtigen Syntax konfigurieren. Nachfolgende Leerzeichen oder unnötige Anführungszeichen oder Wagenrückgänge führen dazu, dass die Eigenschaft falsch konfiguriert ist. Leider zeigt adsutil.vbs keinen Fehler an, wenn Sie einen zusätzlichen Platz hinzufügen, daher müssen Sie sehr vorsichtig sein. Außerdem können Sie die Werte nicht in eine Eingabeaufforderung oder in die metabase.xml-Datei (metabase direct-edit) kopieren oder einfügen und müssen sie manuell eingeben.Überprüfen Sie, ob die Komprimierung auf master-Ebene festgelegt ist, aber durch eine Einstellung auf einer untergeordneten Ebene außer Kraft gesetzt wird.
Komprimierung wäre auf der
w3svc/filters/compressionEbene aktiviert. Es kann jedoch sein, dass eine Einstellung auf Website- oder Anwendungsebene überschrieben wird.Wenn Sie z. B. auf die
w3svc/filters/compressionEbene festgelegtTRUEhabenHcDoDynamicCompressionund für die Standardwebsite auf "Dynamische Komprimierung" festgelegtFALSEistDoDynamicCompression, tritt keine dynamische Komprimierung für Antworten auf Anforderungen für die Standardwebsite auf.Überprüfen Sie, ob ein Antivirenprogramm das Verzeichnis gescannt hat, in dem die komprimierten Dateien gespeichert werden.
Wenn die Komprimierung auf einem Server mit IIS aktiviert ist und eine HTTP-Anforderung aus dem IIS-Komprimierungsverzeichnis bereitgestellt wird, wird möglicherweise eine 0-Byte-Datei anstelle der erwarteten Datei zurückgegeben.
Notiz
Diese Symptome können möglicherweise nur auftreten, wenn die statische HTTP-Komprimierung aktiviert ist.
Dies geschieht, da eine Antivirensoftware, die auf dem IIS-Server ausgeführt wird, das IIS-Komprimierungsverzeichnis scannt.
Daher müssen Sie das IIS-Komprimierungsverzeichnis aus der Scanliste der Antivirensoftware ausschließen.
Überprüfen Sie, ob die angeforderte URL als Teil der an die ausführende DLL-Datei übergebenen Parameter einen Schrägstrich enthält.
Überprüfen Sie, ob die ISAPI-Filter die Anforderungs- oder Antwortheader ändern.
Eine ISAPI ausführt den Sendevorgang und sendet nicht den vollständigen Satz von HTTP-Headern zusammen mit der Entität an
HTTP_COMPRESSION::DoDynamicCompression. DaDoDynamicCompressionnicht alle Daten aus der ISAPI empfangen werden, können wir die Antwort nicht komprimieren. Dies wurde von Drittanbietern und/oder nicht von Microsoft stammenden ISAPIs gesehen, indem die Kopfzeilen in die Funktion eingefügt werden, die für den Entitätstext oder den Entitätstext in der Funktion vorgesehen ist, die für die HTTP-Header vorgesehen ist oder keine Header bereitgestellt werden. Wenn dies geschieht, schlagen Dinge wie der ISAPI-Filter SF_NOTIFY_SEND_RESPONSE oder AddResponseHeaders oder die dynamische Komprimierung fehl. Die ISAPI muss die Header und die Entität an den richtigen Stellen platzieren.Überprüfen Sie, ob der Antwortstatuscode etwas anderes als 200 ist. In IIS 6 oder 7 werden nur Antworten mit einem HTTP 200-Status komprimiert.
Die Antwort mit anderen Statuscodes als 200 wird nicht komprimiert. Sie müssen einen
HTTPModuleschreiben, um dasselbe zu erreichen.Überprüfen Sie, ob die Anforderung einen
Via: headerenthält, derVia headersangibt, dass die Anforderung über einen Proxy an IIS weitergeleitet wird.Viele Proxys behandeln den Komprimierungsheader nicht ordnungsgemäß und stellen komprimierte Daten für Clients bereit, wenn sie nicht vorgesehen sind. Standardmäßig sind die komprimierten Antworten also nicht zulässig, wenn die Anforderung über einen Via-Header verfügt. Sie können dies überschreiben, indem Sie den
HcNoCompressionForProxiesMetabasisschlüssel aufTrue.Überprüfen Sie, ob die Anforderung für eine statische Seite ist, und die Antwort enthält Dokumentfußzeile. Dokumentfußzeilen führen dazu, dass die statische Komprimierung fehlschlägt.
Überprüfen Sie, ob die statische Komprimierung nicht funktioniert. Dies kann passieren, wenn eine Zuordnung von Wildcardanwendungen auf der Stammebene in IIS installiert ist. Beispielsweise verfügen wir über Anwendungszuordnungen für die .html- oder .txt Erweiterungen auf dem Server. Dadurch wird IIS ihre Anforderungen an .txt als dynamische Anforderungen anstelle von statischen Anforderungen in Betracht ziehen, und da .txt keine Erweiterung in der Liste der dynamischen Komprimierung ist, wird sie nicht komprimiert.
Überprüfen Sie, ob die IIS-Komprimierung und
Accept-Encoding: identitydas Feld vorhanden sind.Pro RFC2616, wenn ein
Accept-EncodingFeld in einer Anforderung vorhanden ist und der Server keine Antwort senden kann, die gemäß demAccept-EncodingHeader akzeptabel ist, sollte der Server eine Fehlerantwort mit dem Statuscode 406 (Nicht akzeptabel) senden. Wenn keinAccept-EncodingFeld in einer Anforderung vorhanden ist, geht der Server möglicherweise davon aus, dass der Client eine Inhaltscodierung akzeptiert. Wenn "Identity" einer der verfügbaren Inhaltscodes ist, sollte der Server den Inhaltscode "Identität" verwenden, es sei denn, er enthält zusätzliche Informationen, dass ein anderer Inhaltscode für den Client aussagekräftig ist.Überprüfen Sie, ob Sie die ETW-Ablaufverfolgung zum Beheben des IIS-Komprimierungsproblems verwenden.
Die Ereignisablaufverfolgung für Windows (ETW) ist ein Feature des Windows-Betriebssystems, mit dem Sie Probleme mit HTTP-Anforderungen beheben können.
Hier sind die Schritte zur Problembehandlung des IIS-Komprimierungsproblems.
Erstellen Sie eine Textdatei mit dem Namen IISProviders.txt , und fügen Sie den Inhalt in die Datei ein." IIS: WWW Server" ist der Anbietername, 0xFFFFFFFE bedeutet Ablaufverfolgung für alle Ereignisse, und 5 bedeutet ausführliche Ebene.
Öffnen Sie eine Eingabeaufforderung, und führen Sie den folgenden Befehl aus.
logman start trace compressionTrace -pf IISProviders.txt -etsReproduzieren Sie das Problem.
Führen Sie den folgenden Befehl aus, um die Ablaufverfolgung zu beenden.
logman stop trace compressionTrace -etsKonvertieren Sie die Ablaufverfolgung in eine Textdatei.
Der Ablaufverfolgungsbericht konvertiert die binären Ablaufverfolgungsdaten in Text und erzeugt zwei Dateien im Verzeichnis, in dem Sie den
tracerptBefehl ausgeführt haben:tracerpt compressionTrace.etlSummary.txt enthält allgemeine Details zur Ablaufverfolgungssitzung, einschließlich der verwendeten Anbieter.
DumpFile.csv enthält die tatsächlichen Ablaufverfolgungsdaten in einem Textformat.
Lesen Sie die Ablaufverfolgungsdatei, um nützliche Informationen zu finden. Öffnen Sie die dumpfile.csv, und suchen Sie nach einem Schlüsselwort wie COMPRESSION_NOT_SUCCESS. Ein Beispiel:
IISCompression, STATIC_COMPRESSION_NOT_SUCCESS, 0x000008B0, 129744354075770195, 0, 0, {00000000-0000-0000-0700-0060000000bd}, "NO_MATCHING_SCHEME", 0, 0
Dieser Fehler NO_MATCHING_SCHEME bedeutet, dass für diese Erweiterung oder accept-Encoding keine Komprimierungsschema-Übereinstimmungen vorhanden sind. Eine detaillierte Liste der Komprimierungsfehler finden Sie in der Liste der Komprimierungsfehler.
Überprüfen Sie, ob die FREB-Ablaufverfolgung zur Problembehandlung des IIS-Komprimierungsproblems verwendet wird.
Ausführliche Schritte finden Sie unter Problembehandlung bei fehlgeschlagenen Anforderungen mithilfe der Ablaufverfolgung in IIS 7.
Hier ist ein Beispiel für die Verwendung der IIS 7 FREB-Ablaufverfolgung zur Behandlung von Komprimierungsproblemen.
Liste der Komprimierungsfehler
Eine detaillierte Liste der Komprimierungsfehler finden Sie in der folgenden Tabelle.
Notiz
Die folgenden Gründe gelten sowohl für IIS 6 als auch für IIS 7.
| Ursache | Beschreibung |
|---|---|
| NO_ACCEPT_ENCODING | Keine Vom Client gesendete Accept-Encoding. |
| COMPRESSION_DISABLED | Die Komprimierung ist deaktiviert, da keine geeignete Konfiguration gefunden wurde. |
| NO_COMPRESSION_10 | Der Server ist nicht für die Komprimierung von 1.0-Anforderungen konfiguriert. |
| NO_COMPRESSION_PROXY | Der Server ist nicht für die Komprimierung von Proxyanforderungen konfiguriert. |
| NO_MATCHING_SCHEME | Für diese Erweiterung/Accept-Codierung stimmen keine Komprimierungsschemas überein. |
| UNKNOWN_ERROR | Unbekannter Fehler. |
| NO_COMPRESSION_RANGE | Server nicht für die Komprimierung von Bereichsanforderungen konfiguriert |
| FILE_TOO_SMALL | Datei kleiner als Komprimierungsschwellenwert. |
| FILE_ENCRYPTED | Datei verschlüsselt. |
| COMPRESS_FILE_NOT_FOUND | Komprimierte Kopie ist nicht vorhanden. |
| COMPRESS_FILE_STALE | Komprimierte Kopie veraltet. |
| NO_MATCHING_CONTENT_TYPE | Der Server ist nicht für die Komprimierung des Inhaltstyps für diese Erweiterung konfiguriert. |
| HEADERS_SENT_TWICE | Kopfzeilen, die zweimal für dieselbe Antwort gesendet werden. |
| NO_HEADER_SENT | Vor dem Senden des Entitätstexts wurden keine Header gesendet. |
| NOT_SUCCESS_STATUS | Der Antwortstatuscode ist nicht erfolgreich (200). |
| ALREADY_CONTENT_ENCODING | In der Antwort ist bereits eine Inhaltscodierung vorhanden. |
Notiz
Die folgenden Gründe gelten nur für IIS 7.
| Ursache | Beschreibung |
|---|---|
| FOOTER_ENABLED | Dokumentfuß für statische Dateien aktiviert. |
| NOT_FREQUENTLY_HIT | DIE URL wurde nicht häufig genug angefordert, um die Komprimierung zu rechtfertigen. |
| FAIL_TO_COMPRESS | Komprimierte Kopie konnte nicht erstellt werden. |