I have feebly attempted to enable gzip compression for an (asp.net webforms) web site that I'm working on. I thought that I had everything working, but when I got to dynamic loading of webresource.axd and scriptresource.axd files, they come through compressed and as such the page either fails to load content that relies on the aforementioned files or (when debugging) breaks with countless javascript runtime exceptions, i.e.; invalid character.
Here is (part of) my Global.ascx.cs code behind, obviously wired to the PostReleaseRequestState event.
void OnGlobalPostReleaseRequestState(object sender, EventArgs e)
{
string contentType = Response.ContentType;
// Compress only html, style-sheet, and javascript documents.
switch (contentType)
{
case "application/x-javascript":
case "text/javascript":
case "text/css":
case "text/html":
{
// Get the Accept-Encoding header value to know whether zipping is supported by the browser or not.
string acceptEncoding = Request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(acceptEncoding)) return;
// If gzip is supported then gzip it else if deflate compression is supported then compress in that technique.
if (acceptEncoding.Contains("gzip"))
{
// Compress and set Content-Encoding header for the browser to indicate that the document is zipped.
Response.Filter = new GZipStream(Response.Filter, CompressionMode.Compress);
Response.AppendHeader("Content-Encoding", "gzip");
}
else if (acceptEncoding.Contains("deflate"))
{
// Compress and set Content-Encoding header for the browser to indicate that the document is zipped.
Response.Filter = new DeflateStream(Response.Filter, CompressionMode.Compress);
Response.AppendHeader("Content-Encoding", "deflate");
}
}
break;
}
}
And my web.config with sections of relevance.
<!-- language-all: lang-xml -->
<staticContent>
<!-- Override IIS default, thus allowing JavaScript compression -->
<remove fileExtension=".js" />
<mimeMap fileExtension=".js" mimeType="text/javascript" />
</staticContent>
<httpCompression directory="%SystemDrive%\websites\_compressed" minFileSizeForComp="256">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="false" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true" dynamicCompressionBeforeCache="false" />
<httpProtocol>
<customHeaders>
<add name="Content-Encoding" value="gzip" />
<add name="X-UA-Compatible" value="IE=9" />
</customHeaders>
</httpProtocol>
I need to either disable (*.axd) compression, or force it to be decompressed on the client. Please help...