Я хочу отправить ответ на мой Asp.Net
веб-сайт. и я написал этот код:
public static void CompressPage(HttpRequest Request, HttpResponse Response)
{
string acceptEncoding = Request.Headers["Accept-Encoding"];
Stream prevUncompressedStream = Response.Filter;
if (acceptEncoding.IsEmpty())
{
return;
}
acceptEncoding = acceptEncoding.ToLower();
if (acceptEncoding.Contains("gzip"))
{
Response.Filter = new GZipStream(prevUncompressedStream, CompressionMode.Compress);
Response.AppendHeader("Content-Encoding", "gzip");
}
else if (acceptEncoding.Contains("deflate"))
{
Response.Filter = new DeflateStream(prevUncompressedStream, CompressionMode.Compress);
Response.AppendHeader("Content-Encoding", "deflate");
}
}
и назовите это Page_Load
событие:
protected void Page_Load(object sender, EventArgs e)
{
...
ZipHtmlPage.CompressPage(Request, Response);
}
Проблема в том, что когда я запускаю код с кодом выше и без него в Page_Load
, размер ответа не меняется.
Где проблема?
Спасибо
Редактировать 1)
Я думаю, что "Content-Encoding", "gzip"
не добавляет в заголовок:
Не знаю почему?
Редактировать 2)
Когда я использую HttpModule
для выполнения http сжатия:
public class CompressModule : IHttpModule
{
public void Init(HttpApplication application)
{
application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
}
private void Application_BeginRequest(Object source, EventArgs e)
{
HttpContext context = HttpContext.Current;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-Encoding", "gzip");
}
public void Dispose()
{
}
}
Я получил это на каждой странице: