Ich habe die dynamische Inhaltskomprimierung in IIS 7 aktiviert, aber Fiddler zeigt an, dass meine dynamischen Seiten immer noch ohne Inhaltscodierung bereitgestellt werden: gzip.
Die Komprimierung statischer Inhalte funktioniert auf denselben Servern einwandfrei.
Ich bin nicht sicher, ob es wichtig ist, aber die meisten dynamischen Seiten sind Coldfusion-Seiten (Coldfusion ist als ISAPI-Erweiterung konfiguriert) und wir verwenden auch das IIS-URL-Umschreibungsmodul.
Dies stammt aus meiner applicationhost.config.
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" 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>
...
<urlCompression doDynamicCompression="true" />
Hier ist eine Beispielanfrage:
GET / HTTP/1.1
Host: web5.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
und Antwortheader:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
Server: Microsoft-IIS/7.0
...
Date: Mon, 22 Feb 2010 20:59:36 GMT
Antwort1
Sie können die hier genannten Schritte zur Fehlerbehebung befolgen.HTTP-KOMPRESSION in IIS 6 und IIS 7 mithilfe des Dienstkontos
Antwort2
"Content-Endcoding: chunked" sollte nie in einer Serverantwort erscheinen. "Chunked" ist ein völlig separater Teil der HTTP-Spezifikation, "Transfer-Encoding". Sie sollten nach "Content-Encoding: gzip" suchen, möglicherweise zusätzlich zu "Transfer-Encoding: chunked". Hier ist ein Beispiel von der Homepage von Google:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Date: Wed, 17 Feb 2010 13:43:22 GMT
Expires: Wed, 17 Feb 2010 13:43:22 GMT
Cache-Control: private, must-revalidate, max-age=0
Last-Modified: Wed, 17 Feb 2010 13:43:22 GMT
Server: igfe
Transfer-Encoding: chunked
Content-Encoding: gzip
Was nun das Debuggen Ihres Problems betrifft, komprimiert IIS7 basierend auf dem Inhaltstyp. Wenn also „Content-Type: text/html“ angezeigt wird, komprimiert es die Seite. Stellen Sie also zunächst sicher, dass Ihre Skripte einen Inhaltstyp zurückgeben, den IIS als komprimierbar ansieht (text/*).
Außerdem komprimiert IIS die Seite standardmäßig nicht für eine HTTP/1.0-Anforderung (wird von einigen Proxys wie Squid verwendet) oder Header, die darauf hinweisen, dass die Anforderung von einem Proxyserver stammt (Via: oder X-Forwarded-For:). Dies ist eine konservative Standardeinstellung, um mit der großen Anzahl älterer Proxys umzugehen, die komprimierte HTTP-Inhalte nicht richtig verarbeiten. Sie können dieses Verhalten überschreiben, indem Sie IIS-Konfigurationsdateien bearbeiten (entweder auf Server- oder Site-Ebene).
Stellen Sie abschließend sicher, dass Ihr Client bei der Anfrage Header vom Typ „Accept-Encoding: gzip“ sendet. Wenn es sich um einen Standardbrowser handelt, wird dies standardmäßig der Fall sein, wenn Sie jedoch wget oder ein anderes Tool verwenden, ist dies möglicherweise nicht der Fall. Sie können verwendenGeigerum die gesamte HTTP-Konversation einschließlich Header und Daten anzuzeigen.
Antwort3
Bei einigen Recherchen fand ichDasdas bedeutet, dass die Komprimierung auch auf der Coldfusion-Seite aktiviert werden muss, wenn HTML aus einer Vorlage generiert wird. Ich kann die genaue Quelle nicht finden, aber wenn ich mich richtig erinnere, ist die dynamische Komprimierung auf ASP.Net und PHP ausgerichtet, aber für letzteres muss sie auch im PHP-Framework aktiviert werden.
Daher gehe ich davon aus, dass der Grund, warum Sie die Komprimierung nicht sehen, darin liegt, dass sie auf der Generatorseite aktiviert werden muss, in diesem Fall bei Coldfusion.
Antwort4
Verwenden Sie Notepad, um applicationHost.config zu bearbeiten.Ich habe mehrere Stunden verschwendet, bevor ich verstanden habe, dass meine in Notepad++ (und auch im Visual Studio 2010-Editor!!) vorgenommenen Änderungen von IIS nicht übernommen werden.
Eine alternative Möglichkeit zum Hinzufügen zusätzlicher MIME-Typen zur Sammlung „dynamicTypes“/„staticTypes“ besteht in der Verwendung von appcmd."C:\Windows\System32\Inetsrv\Appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/javascript',enabled='True']" /commit:apphost
Und noch einmal: Nach diesen Änderungen werden Sie sie nur noch im Editor sehen. Notepad++ (und auch der Visual Studio 2010-Editor!!) verwaltet eine Art verdammte alternative Realität/Speicher für applicationHost.config. Es zeigt Ihnen seine eigene Version der Datei (anders als die, die Sie im Editor sehen), selbst nachdem die Datei im Editor bearbeitet und in np++/VS erneut geöffnet wurde.