我需要压缩数据导出网站的所有动态内容 我尝试了很多方法,没有任何作用。 Chrome显示内容未压缩,并且“Content-Encoding”标头不存在。
尝试这样做作为最后的手段(在编写任何回复之前):
context.Response.Filter = new DeflateStream(context.Response.Filter, CompressionMode.Compress);
context.Response.AppendHeader("Content-Encoding", "deflate");
日志记录显示此代码已正确执行。 但是,Chrome会再次显示内容未被压缩。
UPD使用IIS内置压缩时,它似乎工作并请求跟踪显示“DYNAMIC_COMPRESSION_SUCCESS”。但是,IE仍显示响应未压缩。当我使用localhost名称从服务器本身请求页面时也一样。
有什么想法吗?
答案 0 :(得分:4)
我没有尝试手动执行此操作,而是依赖于IIS中内置的预编写(并经过测试)的Microsoft代码,它将为您执行此操作:
安装Dynamic Content Compression on the machine(链接中的项目符号5)和enable it in IIS。 IIS现在将处理静态和动态内容的压缩。维护较少的代码(并且总是有错误)总是一件好事!
答案 1 :(得分:4)
如果您想手动执行此操作,请先检查是否支持压缩,
public static bool IsGZipSupported()
{
string AcceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];
if (!string.IsNullOrEmpty(AcceptEncoding) &&
(AcceptEncoding.Contains("gzip") || AcceptEncoding.Contains("deflate")))
return true;
return false;
}
压缩你的回复,
public static void GZipEncodePage()
{
if (IsGZipSupported()) {
HttpResponse Response = HttpContext.Current.Response;
string AcceptEncoding = HttpContext.Current.Request.Headers("Accept-Encoding");
if (AcceptEncoding.Contains("gzip")) {
Response.Filter = new System.IO.Compression.GZipStream(Response.Filter, System.IO.Compression.CompressionMode.Compress);
Response.AppendHeader("Content-Encoding", "gzip");
} else {
Response.Filter = new System.IO.Compression.DeflateStream(Response.Filter, System.IO.Compression.CompressionMode.Compress);
Response.AppendHeader("Content-Encoding", "deflate");
}
您可以在标题发送到客户端之前检查过滤器
protected void Application_PreSendRequestHeaders()
{
HttpResponse response = HttpContext.Current.Response;
if (response.Filter is GZipStream && response.Headers["Content-encoding"] != "gzip")
response.AppendHeader("Content-encoding", "gzip");
else if (response.Filter is DeflateStream && response.Headers["Content-encoding"] != "deflate")
response.AppendHeader("Content-encoding", "deflate");
}
有关更多信息,请查看此帖子;
答案 2 :(得分:-1)
如果您使用的是IIS7 +,则会出现“压缩”选项。导航到您的站点,在右侧主窗口中,单击“压缩”,然后选中所有2个复选框: