Asp.net HTTP压缩:某些外部脚本/CSS有时无法正确解压缩
我正在实施页面/资源压缩以提高网站性能 我曾尝试实现blowery和邪恶的HttpCompress,但最终得到了相同的结果。这似乎只会影响Firefox,我已经在Chrome和IE上进行了测试 发生的是我第一次请求页面所有外部资源解压ok。第二次或第三次页面出现错误,因为资源似乎未解压缩。我得到的unicode字符如下: (实际上,它们不能在此处正确显示) 通过firebug检查页面时,响应标题显示为: 缓存控制专用 内容类型text/html;字符集=utf-8 内容编码gzip 服务器Microsoft IIS/7.5 X-AspNetMvc-2.0版 X-AspNet-2.0.50727版 通过HttpCompress进行X压缩 X-Powered-By ASP.NET日期7月9日星期五 2010 06:51:40 GMT内容长度2622 这清楚地表明资源是由gzip压缩的。那么客户的泄气端似乎出了问题 我在web.config中添加了以下部分(在适当的位置):Asp.net HTTP压缩:某些外部脚本/CSS有时无法正确解压缩,asp.net,http-compression,Asp.net,Http Compression,我正在实施页面/资源压缩以提高网站性能 我曾尝试实现blowery和邪恶的HttpCompress,但最终得到了相同的结果。这似乎只会影响Firefox,我已经在Chrome和IE上进行了测试 发生的是我第一次请求页面所有外部资源解压ok。第二次或第三次页面出现错误,因为资源似乎未解压缩。我得到的unicode字符如下: (实际上,它们不能在此处正确显示) 通过firebug检查页面时,响应标题显示为: 缓存控制专用 内容类型text/html;字符集=utf-8 内容编码gzip 服务器Mic
<sectionGroup name="blowery.web">
<section name="httpCompress" type="blowery.Web.HttpCompress.SectionHandler, blowery.Web.HttpCompress"/>
</sectionGroup>
<blowery.web>
<httpCompress preferredAlgorithm="gzip" compressionLevel="high">
<excludedMimeTypes>
<add type="image/jpeg"/>
<add type="image/png"/>
<add type="image/gif"/>
</excludedMimeTypes>
<excludedPaths>
<add path="NoCompress.aspx"/>
</excludedPaths>
</httpCompress>
</blowery.web>
<add name="CompressionModule" type="blowery.Web.HttpCompress.HttpModule, blowery.web.HttpCompress"/>
有什么帮助吗?这是我以前遇到的问题,问题是内容长度不正确。为什么不正确?因为它可能在压缩之前计算 如果您手动设置内容长度,只需将其移除,并让模块在可能的情况下进行设置。 我注意到您使用了鼓风机压缩。这可能是鼓风机内部的一个错误/问题。如果您无法找到并修复它,为什么不使用Ms压缩 @ptutt如果您使用的是共享iis,那么可能已经有了所有现成的压缩集,因此存在一种压缩比另一种压缩,您只需要删除您的压缩。如果这是一个问题,那么请确保内容长度为false,因为在第一次压缩之后,第二次压缩将破坏它 如果您的页面在默认情况下已被iis压缩,请使用此网站查看 如果默认情况下不进行压缩,则可以非常轻松地进行压缩。关于Global.asax
protected void Application_BeginRequest(Object sender, EventArgs e)
{
string cTheFile = HttpContext.Current.Request.Path;
string sExtentionOfThisFile = System.IO.Path.GetExtension(cTheFile);
if (sExtentionOfThisFile.Equals(".aspx", StringComparison.InvariantCultureIgnoreCase))
{
string acceptEncoding = MyCurrentContent.Request.Headers["Accept-Encoding"].ToLower();;
if (acceptEncoding.Contains("deflate") || acceptEncoding == "*")
{
// defalte
HttpContext.Current.Response.Filter = new DeflateStream(prevUncompressedStream,
CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-Encoding", "deflate");
} else if (acceptEncoding.Contains("gzip"))
{
// gzip
HttpContext.Current.Response.Filter = new GZipStream(prevUncompressedStream,
CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-Encoding", "gzip");
}
}
}
请注意,我只是写了这段代码,还没有测试。我的代码有点复杂,所以我只是创建了一个简单的版本
查找更多示例:
参考资料:
我使用“邪恶的HttpCompress”得到了完全相同的结果。我不知道MS压缩…这是部署在共享服务器上的,所以我没有访问IIS的权限。我的猜测是他们故意不打开压缩,这样cpu就不会过载。考虑到它是在一个共享服务器上,我将获得多少好处,这可能是有争议的。考虑到两种压缩工具都有相同的问题,我假设我做错了什么。可能是IIS配置?我只在本地进行了测试。刚刚实现了这段代码,它就可以工作了。有了这么简单的东西,你会想为什么blowery和httpcompress会有同样的错误(也许他们使用相同的代码库?)。无论如何,谢谢你的帮助。@ptutt这个错误就是我告诉你的,标题上的长度。
protected void Application_BeginRequest(Object sender, EventArgs e)
{
string cTheFile = HttpContext.Current.Request.Path;
string sExtentionOfThisFile = System.IO.Path.GetExtension(cTheFile);
if (sExtentionOfThisFile.Equals(".aspx", StringComparison.InvariantCultureIgnoreCase))
{
string acceptEncoding = MyCurrentContent.Request.Headers["Accept-Encoding"].ToLower();;
if (acceptEncoding.Contains("deflate") || acceptEncoding == "*")
{
// defalte
HttpContext.Current.Response.Filter = new DeflateStream(prevUncompressedStream,
CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-Encoding", "deflate");
} else if (acceptEncoding.Contains("gzip"))
{
// gzip
HttpContext.Current.Response.Filter = new GZipStream(prevUncompressedStream,
CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-Encoding", "gzip");
}
}
}