我看到人们只是检测到请求浏览器是否支持http压缩。如果支持然后检测支持gzip或deflate。
然后只需将属性添加到响应对象,如
HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
或
HttpContext.Current.Response.AppendHeader("Content-encoding", "deflate");
我只需知道究竟是谁在回应。是webserver还是asp.net工作进程。请详细说明压缩响应的人和方式。感谢
答案 0 :(得分:1)
实际上,您在此处显示的标题不会进行压缩。是什么让压缩是你在Response.Filter上设置的Stream Class,这个压缩是由Asp.Net做的,如:
if (acceptEncoding.Contains("gzip"))
{
// gzip
app.Response.Filter = new GZipStream(prevUncompressedStream, CompressionMode.Compress);
app.Response.AppendHeader("Content-Encoding", "gzip");
}
else if (acceptEncoding.Contains("deflate") || acceptEncoding == "*")
{
// deflate
app.Response.Filter = new DeflateStream(prevUncompressedStream, CompressionMode.Compress);
app.Response.AppendHeader("Content-Encoding", "deflate");
}
如果你做了这个,那么压缩是由asp.net而不是IIS完成的。然后,iis检测到文件已全部准备好压缩并且未再次压缩。有时我看到此检测失败并且页面根本不显示,因此在这种情况下,您将停用iis压缩。
这是asp.net中的gZipStream类 http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx
因此,如果设置了DeflateStream的GZipStream,asp.net工作进程就会进行压缩
以下是asp.net使用GZipStream进行文件压缩的示例 http://www.dotnetperls.com/gzipstream
我更喜欢在asp.net上进行压缩,而不是在iis上进行压缩,因为我对它有更多的控制权。