iis6开启gzip后,是先将需要压缩的静态文件压缩保存在一个目录,请求来时先判断是否支持gzip,不支持直接发送静态文件,支持则再判断文件是否修改,没有就直接发送压缩的文件,有则重新生成压缩文件。 根据我对公司的多个网站观察访问者浏览器支持gzip的高达99%以上,我就想又何必多保存一份静态文件,直接保存压缩后的文件不就ok,既节约了空间又节约了处理的过程,万一碰见那1%不到的访客,解个压给他便是。好!就这么处理,为压缩的html专门取个后缀名.ghtml。
首先iis注册.ghtml文件交给.net处理。
然后将需要生成ghtml的aspx文件通过这个函数处理,也就是生成静态文件,再多一步压缩
处理ghtml请求,浏览器支持gzip就直接写入文件,否则先解压内容再输出:
自己写个HttpModule,在BeginRequest事件中处理.ghtml请求 ,静态页嘛就模拟一下html的304处理
string path = context.Request.Path.ToLower(); string acceptEncoding = request.Headers["Accept-Encoding"];
bool accept = !string.IsNullOrEmpty(acceptEncoding)? acceptEncoding.ToLower().Contains("gzip") : false;
{
if (accept ) {
response.AppendHeader("Content-Encoding", "gzip");
response.TransmitFile(filePath);
}
else
response.Write(DezipText(filePath));// 解压ghtml文件
解压ghtml:
最后还有个解压ghtml函数