IIS 6.0下HTTP压缩的工作原理

来源:互联网 发布:日本mac口红价格 编辑:程序博客网 时间:2024/05/22 05:26

   IIS下HTTP的压缩的性能在前篇文章已经分析过了,虽然说会占用额外的CPU和内存的资源,但是被压缩的文件很小,返回到客户端所需的时间也更少,客户明显察觉网站速度会变快。这篇日志中介绍一下IIS下HTTP压缩的工作原理,翻译自微软官方网站的一篇文章里面的一段,原文是Using HTTP Compression for Faster Downloads
   当IIS收到一个请求的时候,它会客户端发过来的头部信息中检测客户端的浏览器是否支持压缩(现在一般的浏览器都支持压缩,在头部信息会有:"Accept-Encoding: gzip,deflate."这个语句)。IIS再去确定这个请求请求的是静态页面还是动态页面。

     如果请求的是静态页面,IIS会去检查该文件是不是已经被访问过,是否已经存在在保存压缩的临时文件夹中,如果在临时文件夹中没有找到,IIS会给客户端发送没有压缩的文件,后台的进程同时会给该文件生成一个压缩版本,然后存放在临时文件夹中,当后续的请求请求该文件的时候,IIS直接发送存放在临时文件夹下的已经压缩的文件。换句话说,当请求的文件已经存在在临时文件夹的情况下IIS才会发送压缩的文件给客户群,否则会返回没有压缩的文件给客户端。
      如果请求的文件是动态的文件,IIS会生成该文件,然后压缩,再发送给客户端。IIS不会把动态文件的压缩存放在临时文件夹下。
     对静态文件压缩的性能消耗是比较低的,并且也只要生成一次,以后的请求都是从临时文件夹中直接读取。对动态文件的压缩比静态文件压缩更消耗性能,因为动态文件的压缩不会存放在临时目录下,每次的请求都要生成并压缩。当对带宽不充裕的客户端来说,压缩会减小文件的体积,网页加载的速度会快很多。
     当我们启用了HTTP压缩功能,生成的压缩文件的默认的过期时间是1997年的1月1日,这样的设置是为了防止代理服务器返回压缩的文件给那些不支持压缩的客户端。过期时间的设置同时也强制浏览器去服务器请求最新的文件(该文件以前被浏览器请求过),并不是去(浏览器自己的)缓存中读取。

IIS 6支持HTTP压缩。HTTP压缩是一种牺牲CPU性能来降低带宽消耗的功能,如果IIS中启用了HTTP压缩并且客户端浏览器支持HTTP压缩,那么IIS在传送文件之前,会对数据进行压缩后再进行传送。它的工作原理是这样的:

IIS接收到客户端浏览器发送的请求时,将检查客户端浏览器是否支持HTTP压缩;然后IIS检查客户端浏览器请求的文件的扩展名,以确定请求的文件为静态文件或包含动态内容。

如果为静态文件,IIS将查看是否已将此文件以压缩格式存储在临时目录中。如果文件没有以压缩格式存储,IIS会将未压缩的文件发送至发起请求的客户端浏览器,并将此文件进行压缩后存储在临时目录中;如果文件已经以压缩格式存储在临时目录中,IIS会将压缩过的文件发送给浏览器。在客户端浏览器首次请求之前,IIS不会压缩任何文件;在客户端浏览器首次请求某个文件之前,此文件不会被压缩;并且在客户端浏览器首次请求某个文件时,它获得的文件并未经过压缩。

如果文件包含动态内容(应用程序文件),IIS将首先针对动态内容生成响应,然后对生成的响应进行压缩,并将压缩后的响应发送至客户端浏览器;IIS不对此响应进行存储。

压缩静态文件所消耗的CPU性能较少,并且通常只需要压缩一次,然后就保存在缓存的临时目录中;压缩动态内容的代价要高一些,因为它们并不存储在临时目录中,并且每次请求时都必须重新生成。推荐你只压缩静态文件,而不压缩应用程序文件。当然,如果你认为与CPU性能消耗相比你更在乎带宽的利用率,那么也可以压缩应用程序文件;微软建议在CPU利用率已经达到80%以上时,不对应用程序文件进行压缩。

当配置HTTP压缩时,根据你的需要选择压缩静态文件和压缩应用程序文件,如果要压缩应用程序文件,则必需勾选压缩静态文件,然后输入压缩后的内容的缓存临时目录,默认为%windir%/IIS Temporary CompressedFiles,然后输入所存储的压缩内容的最大容量即可,默认为不受限制。
配置MIME类型

从安全性上考虑,IIS 6中只是定义了常见的MIME类型(文件扩展名),而没有和IIS5一样包含通配符MIME映射。这样当客户端浏览器从IIS 6Web服务器上请求某个文件时,如果该文件的扩展名并没有在IIS的MIME类型中进行定义,IIS会返回404错误-文件或目录未找到。对于使用Access数据库的站点,为了防止别人下载Access数据库,有些文章中介绍了将Access数据库改名为.asp来防止下载的方法,这并不安全,最好的办法就是将Access数据库的扩展名修改为MIME类型中未定义的扩展名,这样别人就无法访问此数据库。

当然,有时你需要添加MIME类型。你可以在IIS全局、网站、单个网站这三个级别上添加MIME类型,默认的MIME类型定义在IIS全局属性中,而网站属性中定义的MIME类型可以覆盖所有网站中的MIME类型定义,在单个网站上定义的MIME类型只会影响此站点。

在IIS全局上添加MIME类型的过程如下:

在IIS管理控制台中右击服务器名,然后选择属性;
在弹出的计算机属性对话框上点击MIME类型按钮;

在MIME类型对话框中,你可以创建、修改、删除MIME类型,在此我为ISO文件创建一个MIME类型,点击新建按钮;

在扩展名栏中,键入对应的文件扩展名.iso,如果你不输入“.”(例如只输入ISO),那么IIS会自动为你添加;如果你想添加通配符MIME映射,即允许访问任何没有MIME类型定义的文件,则在扩展名栏输入“*”,不过不推荐使用这种方式。然后在MIME类型栏,输入application/octet-stream,最后点依次击确定即可。
而在网站或单个网站上添加MIME类型定义则是右击网站或单个网站,然后选择属性,点击HTTP头标签中的MIME类型按钮即可进行配置。
原创粉丝点击