Ich versuche, das Problem zu debuggen, warum meine Seiten nicht GZIP'd oder deflationiert werden gemäß YSLOW. Ich habe am Ende fehlgeschlagene Anforderungsprotokolle auf dem Server aktiviert und konnte den fehlgeschlagenen Grund sehen, warum es nicht komprimiert wird. Es wird angenommen, dass es bereits komprimiert ist.Komprimierung in IIS 8.5 nicht erfolgreich, mit ALREADY_CONTENT_ENCODING
DYNAMIC_COMPRESSION_NOT_SUCCESS Reason="ALREADY_CONTENT_ENCODING"
Ich habe die dynamische und statische Komprimierung in IIS aktiviert, ich habe auch die Datei web.config so geändert, dass sie Folgendes enthält.
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
<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>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true"/>
Zusätzlich auf meiner aspx Seite ich eine Methode, die ich vor jeder Seite aufrufen müssen (auf Seite Last) gzip-Komprimierung ausführen (dies könnte sein, warum es den Fehler verursacht). Diese
ist, wie ich die Methode von der Seite zu laden, rufen
//compress page
Compression.GZipEncodePage();
Und das ist die Methode, die die Seite
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace InitialDataEntry
{
public static class Compression
{
/// <summary>
/// Sets up the current page or handler to use GZip through a Response.Filter
/// IMPORTANT:
/// You have to call this method before any output is generated!
/// </summary>
public static void GZipEncodePage()
{
HttpResponse Response = HttpContext.Current.Response;
if (IsGZipSupported())
{
string AcceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];
if (AcceptEncoding.Contains("deflate"))
{
Response.Filter = new System.IO.Compression.DeflateStream(Response.Filter,
System.IO.Compression.CompressionMode.Compress);
Response.AppendHeader("Content-Encoding", "deflate");
}
else
{
Response.Filter = new System.IO.Compression.GZipStream(Response.Filter,
System.IO.Compression.CompressionMode.Compress);
Response.AppendHeader("Content-Encoding", "gzip");
}
}
// Allow proxy servers to cache encoded and unencoded versions separately
Response.AppendHeader("Vary", "Content-Encoding");
}
/// <summary>
/// Determines if GZip is supported
/// </summary>
/// <returns></returns>
public static bool IsGZipSupported()
{
string AcceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];
string IsPartial = HttpContext.Current.Request.Headers["x-microsoftajax"];
if (!string.IsNullOrEmpty(AcceptEncoding) &&
AcceptEncoding.Contains("gzip") || AcceptEncoding.Contains("deflate"))
//Just checking to see if this is a partial page update
if (string.Compare("Delta=true", IsPartial, true) == 0)
{
return false;
}
else
{
return true;
}
else
{
return false;
}
}
}
}
Das verwendete komprimiert durch die Art und Weise zu arbeiten, aber nicht sicher, wann Es hörte auf, aber meine Benutzer erkannten das Problem, als die Seiten aufgebläht wurden und was früher 500k war, ist jetzt 2mb!
Jede Hilfe würde sehr geschätzt werden.
Danke,
Ich habe die app-Pool überprüfen wird mit integrierten Modus, zusätzlich haben wir httpcompression sowie die urlCompression gilt für statische und dynamische haben Druck. Ich habe versucht, eine Demo-Site zu betreiben, ohne die von uns implementierte gzip-Klasse zu verwenden und immer noch keine Komprimierung. Es ist lustig, dass ich Kompression sehe, wenn ich die Website auf diesem lokalen Server laufe, aber sobald jemand versucht, es von außerhalb des Servers zu sehen, wird es nicht mehr komprimiert. – Eliseo