我正在尝试为我的asp.net页面(包括我的CSS和JS文件)实现GZip压缩。我尝试了以下代码,但它只压缩我的.aspx页面(从YSlow中找到)
HttpContext context = HttpContext.Current;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
HttpContext.Current.Response.Cache.VaryByHeaders["Accept-encoding"] = true;
上面的代码只是压缩我的.aspx页面代码(标记),而不是包含在外部文件中的CSS和JS文件。请告诉我如何使用代码在ASP.NET中实现GZip压缩(因为我在共享主机服务器上,我无法访问IIS服务器配置)。而且在上面的代码中,我没有得到最后两行,为什么要使用它们,以及这些行的用途是什么。请解释一下!
发布于 2009-02-16 05:21:10
对于压缩JS & CSS文件,您实际上必须在IIS级处理,因为这些文件是直接呈现的,而不需要ASP.NET运行时。
您可以在IIS中将JSX和CSSX扩展映射到aspnet_isapi.dll,然后利用您的邮政编码,但是IIS可能会为您做得更好。
content-encoding标头告诉浏览器在呈现之前需要解压缩内容。有些浏览器足够聪明,可以根据内容的形状来解决这个问题,但最好是直接告诉它。
这里有接受编码缓存设置,这样gzipped内容的缓存版本就不会被发送到只请求text/html的浏览器。
发布于 2010-12-11 17:46:53
这是css和javascript文件的解决方案。将以下代码添加到web.config文件内的中:
<configuration>
...
<system.webserver>
...
<httpCompression>
<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 doStaticCompression="true" doDynamicCompression="true"/>
...
</system.webserver>
...
<configuration>
发布于 2011-12-11 07:10:15
这可能对你尝试一下很有用,它接受deflate和gzip压缩。
void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
string acceptEncoding = app.Request.Headers["Accept-Encoding"];
Stream prevUncompressedStream = app.Response.Filter;
if (app.Context.CurrentHandler == null)
return;
if (!(app.Context.CurrentHandler is System.Web.UI.Page ||
app.Context.CurrentHandler.GetType().Name == "SyncSessionlessHandler") ||
app.Request["HTTP_X_MICROSOFTAJAX"] != null)
return;
if (acceptEncoding == null || acceptEncoding.Length == 0)
return;
acceptEncoding = acceptEncoding.ToLower();
if (acceptEncoding.Contains("deflate") || acceptEncoding == "*")
{
// deflate
app.Response.Filter = new DeflateStream(prevUncompressedStream,
CompressionMode.Compress);
app.Response.AppendHeader("Content-Encoding", "deflate");
}
else if (acceptEncoding.Contains("gzip"))
{
// gzip
app.Response.Filter = new GZipStream(prevUncompressedStream,
CompressionMode.Compress);
app.Response.AppendHeader("Content-Encoding", "gzip");
}
}
https://stackoverflow.com/questions/552317
复制相似问题