我需要压缩我的数据导出网站的所有动态内容。
我试过很多方法,没有什么工作。 铬显示内容不被压缩和“内容编码”报头不存在。
试图做这样的作为最后的手段方法(之前写任何回应):
context.Response.Filter = new DeflateStream(context.Response.Filter, CompressionMode.Compress);
context.Response.AppendHeader("Content-Encoding", "deflate");
记录显示,该代码是正确执行。 然而,Chrome会显示的内容不被压缩,再次。
UPD在使用IIS内置的压缩功能,它似乎工作,并请求跟踪显示“DYNAMIC_COMPRESSION_SUCCESS”。 然而,IE仍然显示响应不被压缩。 同样的,当我要求使用本地主机的名称服务器本身的页面。
有任何想法吗?
如果你想手动做到这一点首先检查所支持的压缩,
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");
}
欲了解更多信息,请查看该职位;
而不是试图这样做手工我就靠内置到IIS预先编写的(和测试),微软的源代码,会为你这样做:
安装在机器上动态内容压缩 (子弹5中的链路)和在IIS启用它 。 IIS现在将处理压缩对静态和动态内容。 维护更少的代码(和总是有错误)始终是一件好事!
如果您使用的IIS7 +,有一个压缩选项。 导航到你的网站,在右边主窗口中,单击“压缩”,并检查所有2个复选框:
- 启用动态内容压缩
- 启用静态内容压缩