<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>简单生活 -- Kevin Yang的博客 &#187; IIS6</title>
	<atom:link href="http://www.imkevinyang.com/tags/iis6/feed" rel="self" type="application/rss+xml" />
	<link>http://www.imkevinyang.com</link>
	<description>It&#039;s all about sharing</description>
	<lastBuildDate>Sun, 05 Feb 2012 15:37:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>为什么IIS7/7.5的Gzip不起作用</title>
		<link>http://www.imkevinyang.com/2010/05/%e4%b8%ba%e4%bb%80%e4%b9%88iis77-5%e7%9a%84gzip%e4%b8%8d%e8%b5%b7%e4%bd%9c%e7%94%a8.html</link>
		<comments>http://www.imkevinyang.com/2010/05/%e4%b8%ba%e4%bb%80%e4%b9%88iis77-5%e7%9a%84gzip%e4%b8%8d%e8%b5%b7%e4%bd%9c%e7%94%a8.html#comments</comments>
		<pubDate>Sat, 08 May 2010 09:56:35 +0000</pubDate>
		<dc:creator>Kevin Yang</dc:creator>
				<category><![CDATA[疑难杂症]]></category>
		<category><![CDATA[GZip压缩]]></category>
		<category><![CDATA[IIS6]]></category>
		<category><![CDATA[IIS7]]></category>
		<category><![CDATA[IIS7.5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[动态压缩]]></category>
		<category><![CDATA[静态压缩]]></category>

		<guid isPermaLink="false">http://www.imkevinyang.com/?p=1418</guid>
		<description><![CDATA[<p>我在<a title="IIS7配置Gzip压缩" href="http://www.imkevinyang.com/2009/06/iis7%E9%85%8D%E7%BD%AEgzip%E5%8E%8B%E7%BC%A9.html" target="_blank">IIS7配置Gzip压缩</a>一文中介绍了IIS7对于gzip压缩的相关配置，以及默认情况下，由于IIS7将Javascript配置为动态压缩（Dynamic Compression），受CPU还有其他因素的影响，不一定会返回gzip压缩后的内容。 但是前阵子发现，尽管将Javascript配置成了静态压&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>我在<a title="IIS7配置Gzip压缩" href="http://www.imkevinyang.com/2009/06/iis7%E9%85%8D%E7%BD%AEgzip%E5%8E%8B%E7%BC%A9.html" target="_blank">IIS7配置Gzip压缩</a>一文中介绍了IIS7对于gzip压缩的相关配置，以及默认情况下，由于IIS7将Javascript配置为动态压缩（Dynamic Compression），受CPU还有其他因素的影响，不一定会返回gzip压缩后的内容。 但是前阵子发现，尽管将Javascript配置成了静态压缩，请求Javascript脚本文件的时候偶尔还是会出现没有gzip的情况。这篇文章和大家分享一下我遇到的这个问题以及解决这个问题的过程和思路，希望对大家有所帮助。</p>
<h2>“随机”的gzip行为</h2>
<p>问题的症状非常简单而又奇怪。有时候连续访问脚本多次，刚开始没有gzip，再次访问又有gzip。等过好一会再去访问，gzip又没有了。有的时候则是无论怎么访问都不给我返回gzip后的响应。</p>
<h2>问题的分析</h2>
<p>排除了CPU负载过大的因素，因为发现当深夜机器CPU负载正常的时候也一样出现这样的问题。</p>
<p>在系统日志中发现以下Warning条目，引起了我的注意：</p>
<blockquote><p>Warning    2010/4/13 6:32:41    IIS-W3SVC-WP    2264    None</p>
<p>The directory specified for caching compressed content C:\inetpub\temp\IIS Temporary Compressed Files\XXX is invalid.  Static compression is being disabled.</p></blockquote>
<p>通过日志筛选，发现从09年7月份就一直出现这样的Warning了，而且出现频率是隔1-3天左右。</p>
<p>这个文件夹是IIS用于存放压缩后的静态内容缓存。按照上面日志的意思，是说这个目录出了问题，导致静态压缩功能被禁用了。但是我明明可以访问这个文件夹，而且里头确实还放着缓存的脚本。</p>
<p>IIS论坛上提这个问题的帖子很多，但最终得到解答的没看到。不过其中一些人的回复倒是给了我不少思路。其中有人说道可能是文件夹权限问题，我看了看那个压缩缓存目录，上面的权限的确是应用程序池的身份，没有问题。使用ProcessMonitor监测了w3wp.exe进程的活动情况，没有看到这个进程在访问文件系统时出现错误。</p>
<p>后来在网上看到了<a href="http://www.ksingla.net/">Kanwaljeet Singla</a>（IIS开发团队成员）的一篇文章，介绍IIS7相比IIS6在压缩模块上的改动，文中提到了一点，<strong><span style="color: #008000;">从IIS7开始，为了降低开销，IIS只对那些频繁访问的静态资源启用压缩</span></strong>。通过IIS7新引入的两个配置选项frequentHitThreshold和frequentHitTimePeriod，我们可以设定，当某个资源在frequentHitTimePeriod时间内被连续访问了frequentHitThreshold次，那么就算是“频繁访问”了。默认的配置是10秒钟内连续对同一Url发起2次请求就算此Url对应的资源属于频繁访问的资源，IIS服务器就会对其进行压缩，然后丢入缓存目录。</p>
<p>这也就解释了为什么有时候第一次请求脚本的时候，服务器没有返回gzip压缩后的内容，而是等你接着下一次访问的时候才会返回gzip响应。</p>
<p><img style="display: inline; border-width: 0px;" title="连续访问Javascript才会gzip" src="http://www.imkevinyang.com/wp-content/uploads/2010/05/image2.png" border="0" alt="连续访问Javascript才会gzip" width="494" height="85" /></p>
<p>但是按照这篇文章提到的IIS的设计理念，一旦资源被压缩缓存过，那么以后就不会再应用这个“频繁访问”的检测逻辑了，因为毕竟已经没有压缩开销了。而我非常确信这个脚本已经被缓存在服务器硬盘上了，那为什么我过一段时间再去访问的时候还是没有gzip呢？</p>
<p>在IIS7中有一个功能，叫做失败请求跟踪（Failed request tracing），允许技术人员跟踪那些出问题的请求在IIS内部都发生了什么事。为了揭开我的疑问，我对此网站开启了失败请求跟踪。</p>
<h2>IIS7的Bug？！</h2>
<p>打开IIS7管理器，定位到相应的网站右侧的操作面板，开启“失败请求跟踪”。默认跟踪日志文件是存放在%SystemDrive%\inetpub\logs\FailedReqLogFiles目录中。</p>
<p><img style="display: inline; border-width: 0px;" title="image" src="http://www.imkevinyang.com/wp-content/uploads/2010/05/image3.png" border="0" alt="image" width="138" height="93" /> <img style="display: inline; border-width: 0px;" title="image" src="http://www.imkevinyang.com/wp-content/uploads/2010/05/image4.png" border="0" alt="image" width="192" height="120" /></p>
<p>然后在功能面板中找到“失败请求跟踪规则”进行配置：</p>
<p><img style="display: inline; border-width: 0px;" title="image" src="http://www.imkevinyang.com/wp-content/uploads/2010/05/image5.png" border="0" alt="image" width="202" height="128" /></p>
<p>为了防止其他脚本的干扰，在这里我限定了只跟踪测试的脚本</p>
<p><img style="display: inline; border-width: 0px;" title="image" src="http://www.imkevinyang.com/wp-content/uploads/2010/05/image6.png" border="0" alt="image" width="164" height="159" /></p>
<p>响应状态填写200即可</p>
<p><img style="display: inline; border-width: 0px;" title="image" src="http://www.imkevinyang.com/wp-content/uploads/2010/05/image7.png" border="0" alt="image" width="146" height="151" /></p>
<p>接下来是选择跟踪提供程序，也就是给你提供跟踪日志源的程序，由于我们的脚本只经过静态文件处理器，因此这里我们只需要选择www server处理程序即可。</p>
<p><img style="display: inline; border-width: 0px;" title="image" src="http://www.imkevinyang.com/wp-content/uploads/2010/05/image8.png" border="0" alt="image" width="274" height="245" /></p>
<p>然后我们就可以去测试一下访问出问题的脚本了。一旦IIS中途处理遇到些问题，那么就会以xml形式记录下相关的日志。打开FailedReqLogFiles目录，里头会有一些fr000001.xml这样格式的文件，每个文件代表一次失败请求。我们打开这个文件，查找compression关键词，发现了以下内容：</p>
<pre class="brush: xml;">&lt;Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"&gt;
 &lt;System&gt;
  &lt;Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/&gt;
  &lt;EventID&gt;0&lt;/EventID&gt;
  &lt;Version&gt;1&lt;/Version&gt;
  &lt;Level&gt;4&lt;/Level&gt;
  &lt;Opcode&gt;3&lt;/Opcode&gt;
  &lt;Keywords&gt;0x40&lt;/Keywords&gt;
  &lt;TimeCreated SystemTime="2010-05-13T16:59:08.086Z"/&gt;
  &lt;Correlation ActivityID="{00000000-0000-0000-FD2B-008041000061}"/&gt;
  &lt;Execution ProcessID="10752" ThreadID="14504"/&gt;
  &lt;Computer&gt;DMZ&lt;/Computer&gt;
 &lt;/System&gt;
 &lt;EventData&gt;
  &lt;Data Name="ContextId"&gt;{00000000-0000-0000-FD2B-008041000061}&lt;/Data&gt;
  &lt;Data Name="Reason"&gt;14&lt;/Data&gt;
 &lt;/EventData&gt;
 &lt;RenderingInfo Culture="zh-CN"&gt;
  &lt;Opcode&gt;STATIC_COMPRESSION_NOT_SUCCESS&lt;/Opcode&gt;
  &lt;Keywords&gt;
   &lt;Keyword&gt;Compression&lt;/Keyword&gt;
  &lt;/Keywords&gt;
  &lt;freb:Description Data="Reason"&gt;NOT_FREQUENTLY_HIT&lt;/freb:Description&gt;
 &lt;/RenderingInfo&gt;
 &lt;ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace"&gt;
  &lt;EventGuid&gt;{E60CEE96-4472-448D-A13C-2170B18220EC}&lt;/EventGuid&gt;
 &lt;/ExtendedTracingInfo&gt;
&lt;/Event&gt;</pre>
<p>在上面，我们看到了NOT_FREQUENTLY_HIT的字样，看上去响应没有gzip的原因，还是因为没有达到“频繁访问”的要求，即使请求的资源已经被压缩过然后存放在硬盘上了。似乎这个压缩缓存是有一定的时效的，就是过了多长时间就得重新验证一下这个“频繁访问”的逻辑了。</p>
<p>我又进行了大量的测试，发现这个失效时间大约是在5分钟。也就是说，当你频繁访问一个资源，IIS开始对其进行压缩并存放在本地压缩缓存目录之后，大约过5分钟，你再去访问，还是会重新执行“频繁访问”这个验证逻辑。</p>
<p>为了证实我得到的结论，我在推特上向<a href="http://www.ksingla.net/">Kanwaljeet Singla</a>（他的推特是@kjsingla）询问了这个问题。出乎我的意料，他很快就回复了我，估计是因为我在做这个测试的时候已经半夜了，他那边刚好是白天的缘故吧。他经过测试，证实“频繁访问”的逻辑检测发生在“响应是否已经压缩”逻辑之前，这确实是IIS7/7.5的一个Bug。</p>
<p>解决办法倒是很简单，只需要将“频繁访问”定义得更宽泛一些即可。例如1分钟内1次访问。</p>
<pre class="brush: xml">&lt;configuration&gt;
    &lt;system.webServer&gt;
        &lt;serverRuntime frequentHitThreshold="1" frequentHitTimePeriod="00:01:00" /&gt;
    &lt;/system.webServer&gt;
&lt;/configuration&gt;</pre>
<h2>问题真的解决了吗？</h2>
<p>当我以为问题圆满解决，满意的睡着之后，第二天测试的时候发现请求脚本又没有gzip了，而且这次是连着访问好几次都没有压缩，这没法用我昨晚得到的结论去解释。让我非常郁闷-_-|||</p>
<p>冷静！</p>
<p>在系统日志中，我又看到了压缩目录无效的警告信息了，但这次，这个压缩目录是真没了。回想起那个时刻做的操作，当时运营的网站抛出未处理的异常，我修改完这个异常就把应用程序池给重启了。难道是说，当网站出现异常的时候，如果强制回收应用程序池的话，会导致静态压缩目录被删除？更奇怪的是，当我再次回收应用程序池，发现这个压缩目录又被重新创建了。</p>
<p>为了验证我的猜想，我又重复了这个过程，让网站抛出异常=&gt;重启应用程序池=&gt;再次请求脚本，问题重现；我又新建了一个一摸一样配置的测试网站，同样的测试流程，却发现压缩目录正常，没有出现上述的症状。</p>
<p>经过细致的对比，我发现运营的网站和我测试的网站环境还是不大一样的。运营的网站时时刻刻都有外部的请求，而且还很频繁。而测试网站不会有任何干扰的流量。</p>
<p>为了模拟真实的情况，我用iMacro写了一个宏，不间断的向测试网站请求该脚本。一开始，可以看到压缩目录确实是存在的，然后我在中途手动回收了应用程序池。发现压缩缓存目录确实被删除了。</p>
<p><img style="display: inline; border: 0px;" title="image" src="http://www.imkevinyang.com/wp-content/uploads/2010/05/image9.png" border="0" alt="image" width="449" height="115" /></p>
<p>经过再细致的测试，我最终得到一个结论：</p>
<blockquote><p>在IIS7/7.5中，如果为应用程序池配置了administrator的账号权限，那么如果在应用程序池处理静态文件压缩的时候回收应用程序池，会导致压缩缓存目录被删除。直到下次应用程序池健康重启的时候，此压缩缓存目录才会被重新创建。</p></blockquote>
<p>这个结论我还没有得到IIS团队的证实。但在我几台机器上的IIS7和7.5测试的结果确实都是这样的。联想之前的系统日志中，每隔1-3天就出现这样的问题，刚好是因为IIS7默认的回收间隔是1740分钟，也就是1天5小时。我计算了一下系统日志中的所有关于静态压缩目录警告出现的时间，和这个回收间隔的倍数非常吻合。</p>
<p>解决办法有两个：</p>
<ul>
<li>如果没有必要，则不要给应用程序池配置administrator的账号，使用内置的账号不会出现这样的问题。</li>
<li>禁用固定时间间隔回收，改成在一个相对空闲的固定时刻回收，例如半夜4点。</li>
</ul>
<ul>希望我奋战2个晚上得到的结论对你有所帮助~</ul>
<p style="text-align: right;">——<a title="为什么IIS7/7.5的Gzip不起作用" href="http://www.imkevinyang.com/2010/05/%E4%B8%BA%E4%BB%80%E4%B9%88iis77-5%E7%9A%84gzip%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.html" target="_self"><em><strong>Kevin Yang</strong></em></a></p>

	标签：<a href="http://www.imkevinyang.com/tags/gzip%e5%8e%8b%e7%bc%a9" title="GZip压缩" rel="tag">GZip压缩</a>, <a href="http://www.imkevinyang.com/tags/iis6" title="IIS6" rel="tag">IIS6</a>, <a href="http://www.imkevinyang.com/tags/iis7" title="IIS7" rel="tag">IIS7</a>, <a href="http://www.imkevinyang.com/tags/iis7-5" title="IIS7.5" rel="tag">IIS7.5</a>, <a href="http://www.imkevinyang.com/tags/javascript" title="Javascript" rel="tag">Javascript</a>, <a href="http://www.imkevinyang.com/tags/%e5%8a%a8%e6%80%81%e5%8e%8b%e7%bc%a9" title="动态压缩" rel="tag">动态压缩</a>, <a href="http://www.imkevinyang.com/categories/techarticles/knottyproblems" title="疑难杂症" rel="tag">疑难杂症</a>, <a href="http://www.imkevinyang.com/tags/%e9%9d%99%e6%80%81%e5%8e%8b%e7%bc%a9" title="静态压缩" rel="tag">静态压缩</a><br />

	<h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.imkevinyang.com/2010/05/64%e4%bd%8d%e7%b3%bb%e7%bb%9f%e4%b8%8biis7-isapi%e5%a4%84%e7%90%86%e5%99%a8%e5%8a%a0%e8%bd%bd%e5%a4%b1%e8%b4%a5.html" title="64位系统下IIS7 ISAPI处理器加载失败 (2010/05/05)">64位系统下IIS7 ISAPI处理器加载失败</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/11/button%e6%a0%87%e7%ad%be%e9%bc%a0%e6%a0%87%e7%82%b9%e5%87%bb%e4%ba%8b%e4%bb%b6%e7%9a%84%e8%a7%a6%e5%8f%91%e6%ba%90%e9%97%ae%e9%a2%98.html" title="Button标签鼠标点击事件的触发源问题 (2009/11/27)">Button标签鼠标点击事件的触发源问题</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/03/ie%e4%b8%ad%e4%bd%bf%e7%94%a8windowopen%e6%89%93%e5%bc%80%e6%96%b0%e7%aa%97%e5%8f%a3%e6%97%b6%e6%97%a0%e6%b3%95%e8%8e%b7%e5%8f%96referrer%e5%af%b9%e8%b1%a1.html" title="IE中使用window.open打开新窗口时无法获取Referrer对象 (2009/03/07)">IE中使用window.open打开新窗口时无法获取Referrer对象</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/06/iis7%e9%85%8d%e7%bd%aegzip%e5%8e%8b%e7%bc%a9.html" title="IIS7配置Gzip压缩 (2009/06/29)">IIS7配置Gzip压缩</a> </li>
	<li><a href="http://www.imkevinyang.com/2010/07/javajs%e5%a6%82%e4%bd%95%e4%bd%bf%e7%94%a8%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e5%8c%b9%e9%85%8d%e5%b5%8c%e5%a5%97html%e6%a0%87%e7%ad%be.html" title="Java/Js如何使用正则表达式匹配嵌套Html标签 (2010/07/30)">Java/Js如何使用正则表达式匹配嵌套Html标签</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/07/javascript-%e4%b8%ad%e7%9a%84false%e9%9b%b6%e5%80%bcnullundefined%e5%92%8c%e7%a9%ba%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%af%b9%e8%b1%a1.html" title="Javascript 中的false,零值,null,undefined和空字符串对象 (2009/07/07)">Javascript 中的false,零值,null,undefined和空字符串对象</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/05/javascript%e4%b8%ad%e8%8e%b7%e5%8f%96%e5%87%ba%e9%94%99%e4%bb%a3%e7%a0%81%e6%89%80%e5%9c%a8%e6%96%87%e4%bb%b6%e5%8f%8a%e8%a1%8c%e6%95%b0.html" title="Javascript中获取出错代码所在文件及行数 (2009/05/18)">Javascript中获取出错代码所在文件及行数</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/04/javascript%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%93%88%e5%b8%8c%e5%87%bd%e6%95%b0.html" title="Javascript字符串哈希函数 (2009/04/11)">Javascript字符串哈希函数</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/06/javascript%e6%93%8d%e7%ba%b5cookie.html" title="Javascript操纵Cookie (2009/06/11)">Javascript操纵Cookie</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/09/%e4%bd%bf%e7%94%a8%e7%9b%b8%e5%af%b9url%e6%97%a0%e7%bc%9d%e5%88%87%e6%8d%a2http-https.html" title="使用相对Url无缝切换HTTP-HTTPS (2009/09/18)">使用相对Url无缝切换HTTP-HTTPS</a> </li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.imkevinyang.com/2010/05/%e4%b8%ba%e4%bb%80%e4%b9%88iis77-5%e7%9a%84gzip%e4%b8%8d%e8%b5%b7%e4%bd%9c%e7%94%a8.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>（转）IIS6上启用Gzip压缩(HTTP压缩) 详解</title>
		<link>http://www.imkevinyang.com/2009/06/%ef%bc%88%e8%bd%ac%ef%bc%89iis6%e4%b8%8a%e5%90%af%e7%94%a8gzip%e5%8e%8b%e7%bc%a9http%e5%8e%8b%e7%bc%a9-%e8%af%a6%e8%a7%a3.html</link>
		<comments>http://www.imkevinyang.com/2009/06/%ef%bc%88%e8%bd%ac%ef%bc%89iis6%e4%b8%8a%e5%90%af%e7%94%a8gzip%e5%8e%8b%e7%bc%a9http%e5%8e%8b%e7%bc%a9-%e8%af%a6%e8%a7%a3.html#comments</comments>
		<pubDate>Sun, 28 Jun 2009 13:07:00 +0000</pubDate>
		<dc:creator>Kevin Yang</dc:creator>
				<category><![CDATA[技术随笔]]></category>
		<category><![CDATA[GZip]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[IIS6]]></category>
		<category><![CDATA[压缩]]></category>

		<guid isPermaLink="false">http://www.imkevinyang.com/2009/06/%ef%bc%88%e8%bd%ac%ef%bc%89iis6%e4%b8%8a%e5%90%af%e7%94%a8gzip%e5%8e%8b%e7%bc%a9http%e5%8e%8b%e7%bc%a9-%e8%af%a6%e8%a7%a3.html</guid>
		<description><![CDATA[摘要
<p>本文总结了如何为使用IIS托管的网站启用Gzip压缩, 从而减少网页网络传输大小, 提高用户显示页面的速度.</p>
前言.
<p>本文的知识点是从互联网收集整理, 主要来源于中文wiki.&#160; 使用YSlow检测网站启用了哪些优化时, Gzip是十分关键的一项. 启动Gip压缩将立竿见影的减少页面的网络传输大小. </p>
压&#8230;]]></description>
			<content:encoded><![CDATA[<h2>摘要</h2>
<p>本文总结了如何为使用IIS托管的网站启用Gzip压缩, 从而减少网页网络传输大小, 提高用户显示页面的速度.</p>
<h2>前言.</h2>
<p>本文的知识点是从互联网收集整理, 主要来源于中文wiki.&#160; 使用YSlow检测网站启用了哪些优化时, Gzip是十分关键的一项. 启动Gip压缩将立竿见影的减少页面的网络传输大小. </p>
<h2>压缩概述</h2>
<p>HTTP压缩是在Web服务器和浏览器间传输压缩文本内容的方法。HTTP压缩采用通用的压缩算法如gzip等压缩HTML、JavaScript或CSS文件。压缩的最大好处就是降低了网络传输的数据量，从而提高客户端浏览器的访问速度。当然，同时也会增加一点点服务器的负担。Gzip是比较常见的一种HTTP压缩算法。</p>
<h2>HTTP压缩工作原理</h2>
<p>Web服务器处理HTTP压缩的工作原理如下： </p>
<p>1.Web服务器接收到浏览器的HTTP请求后，检查浏览器是否支持HTTP压缩； </p>
<p>在用户浏览器发送请求的HTTP头中,&#160; 带有&quot;Accept-Encoding: gzip, deflate&quot;参数则表明支持gzip和deflate两种压缩算法. </p>
<p>2.如果浏览器支持HTTP压缩，Web服务器检查请求文件的后缀名； </p>
<p>静态文件和动态文件后缀启动要所都需要在MetaBase.xml中设置. </p>
<p>静态文件需要设置: <a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/c78624a9-f287-4bce-b0d7-c39a25cd39da.mspx">HcFileExtensions Metabase Property</a> (单击跳转到MSDN说明) </p>
<p>动态文件需要设置: <a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/90a64e8d-c388-48e3-be49-009e0db567a1.mspx">HcScriptFileExtensions Metabase Property</a> (单击跳转到MSDN说明) </p>
<p>3.如果请求文件是HTML、CSS等静态文件并且文件后缀启用了压缩，则Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件； </p>
<p>4.如果请求文件的压缩文件不存在，Web服务器向浏览器返回未压缩的请求文件，并在压缩缓冲目录中存放请求文件的压缩文件； </p>
<p>5.如果请求文件的最新压缩文件已经存在，则直接返回请求文件的压缩文件； </p>
<p>6.如果请求文件是ASPX等动态文件并且文件后缀启用了压缩，Web服务器动态压缩内容并返回浏览器，压缩内容不存放到压缩缓存目录中。 </p>
<h2>在IIS6中启用HTTP压缩</h2>
<p>IIS默认并不支持HTTP压缩，需要进行简单的配置 </p>
<p>1.打开Internet信息服务(IIS)管理器，右击&quot;网站&quot;-&gt;&quot;属性&quot;，选择&quot;服务&quot;。在&quot;HTTP压缩&quot;框中选中&quot;压缩应用程序文件&quot;和&quot;压缩静态文件&quot;，按需要设置&quot;临时目录&quot;和&quot;临时目录的最大限制&quot;； </p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://www.imkevinyang.com/wp-content/uploads/2009/06/clip-image001-thumb.png" width="244" height="207" /></p>
<p>2.提醒: 经试验此步骤在本人机器上没有作用, 可以忽略. </p>
<p>在Internet信息服务(IIS)管理器，右击&quot;Web服务扩展&quot;-&gt;&quot;增加一个新的Web服务扩展...&quot;，在&quot;新建Web服务扩展&quot;框中输入扩展名&quot;HTTP Compression&quot;，添加&quot;要求的文件&quot;为C:\WINDOWS\system32\inetsrv\gzip.dll，其中Windows系统目录根据您的安装可能有所不同，选中&quot;设置扩展状态为允许&quot;； </p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://www.imkevinyang.com/wp-content/uploads/2009/06/clip-image002-thumb.png" width="244" height="161" /></p>
<p>3.使用文本编辑器打开C:\Windows\System32\inetsrv\MetaBase.xml(建议先备份), </p>
<p>找到Location =&quot;/LM/W3SVC/Filters/Compression/gzip用于设置gzip压缩， </p>
<p>找到Location =&quot;/LM/W3SVC/Filters/Compression/deflate&quot;用于设置deflate压缩. </p>
<p>上面两个节点紧挨着.并且设置的属性相同. </p>
<p>如果需要压缩动态文件，则将HcDoDynamicCompression设置为&quot;TRUE&quot;，并在HcScriptFileExtensions中增加您要压缩的动态文件后缀名，如aspx；如果需要压缩静态文件，则将HcDoStaticCompression和HcDoOnDemandCompression设置为&quot;TRUE&quot;，并在HcFileExtensions中增加您需要压缩的静态文件后缀名，如xml、css等；HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的压缩率，数值在0-10, 默认为0. </p>
<p>HcDynamicCompressionLevel属性说明:<a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0d785bb2-8b9b-46db-96a5-a8343970324b.mspx">HcDynamicCompressionLevel Metabase Property</a></p>
<p>HcOnDemandCompLevel 属性说明:<a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/c63788cc-70b4-4a44-a9a3-329fa8fb3afb.mspx">HcOnDemandCompLevel Metabase Property</a></p>
<p>说明: 这两个属性值一般推荐设置为9, 具有最佳性价比.但是在我的window server 2003上, 压缩率无论如何设置, jQuery和jQuery UI两个文件(58k/188k)压缩后的大小一直相同.(20k/45k).&#160; </p>
<p>下面是我的实例: </p>
<p>&lt;IIsCompressionScheme Location =&quot;/LM/W3SVC/Filters/Compression/deflate&quot; HcCompressionDll=&quot;%windir%\system32\inetsrv\gzip.dll&quot; HcCreateFlags=&quot;0&quot; HcDoDynamicCompression=&quot;TRUE&quot; HcDoOnDemandCompression=&quot;TRUE&quot; HcDoStaticCompression=&quot;true&quot; HcDynamicCompressionLevel=&quot;9&quot; HcFileExtensions=&quot;htm html txt js css swf xml&quot; HcOnDemandCompLevel=&quot;9&quot; HcPriority=&quot;1&quot; HcScriptFileExtensions=&quot;asp </p>
<p>aspx dll exe&quot; &gt; &lt;/IIsCompressionScheme&gt; &lt;IIsCompressionScheme Location =&quot;/LM/W3SVC/Filters/Compression/gzip&quot; HcCompressionDll=&quot;%windir%\system32\inetsrv\gzip.dll&quot; HcCreateFlags=&quot;1&quot; HcDoDynamicCompression=&quot;TRUE&quot; HcDoOnDemandCompression=&quot;TRUE&quot; HcDoStaticCompression=&quot;true&quot; HcDynamicCompressionLevel=&quot;9&quot; HcFileExtensions=&quot;htm html txt js css swf xml&quot; HcOnDemandCompLevel=&quot;9&quot; HcPriority=&quot;1&quot; HcScriptFileExtensions=&quot;asp </p>
<p>aspx dll exe&quot; &gt; &lt;/IIsCompressionScheme&gt;</p>
<p>4.编辑完毕后保存MetaBase.xml文件；如果文件无法保存，则可能IIS正在使用该文件。打开&quot;开始&quot;-&gt;&quot;管理工具&quot;-&gt;&quot;服务&quot;，停止&quot;IIS Admin Service&quot;后，即可保存； </p>
<p>5.最后，重新启动IIS。可以到HTTP压缩测试网站验证结果.以jQuery为例, 核心类库和UI类库原始大小分别是57k和188k,压缩后分别是20k和45k: </p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://www.imkevinyang.com/wp-content/uploads/2009/06/clip-image003-thumb.png" width="244" height="16" /></p>
<p>我们通过Http头中的: Content-Encoding:gzip 属性判断返回后的数据已经启用了gzip压缩: </p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://www.imkevinyang.com/wp-content/uploads/2009/06/clip-image004-thumb.png" width="244" height="117" /></p>
<p>使用YSlow检测, 当只启动静态文件压缩时, Gzip压缩评级为B: </p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image005" border="0" alt="clip_image005" src="http://www.imkevinyang.com/wp-content/uploads/2009/06/clip-image005-thumb.png" width="244" height="33" /></p>
<p>当同时启动了动态文件压缩时, Gzip压缩评级为A: </p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://www.imkevinyang.com/wp-content/uploads/2009/06/clip-image006-thumb.png" width="188" height="31" /></p>
<h2>要点总结</h2>
<p>1. 在修改MetaBase.xml文件时, 要停止&quot;IIS Admin Service&quot;服务. 否则无法保存. </p>
<p>2.静态压缩和动态压缩率最好设置为9.&#160; </p>
<p>3.上文的步骤2, 即使不添加Web服务扩展效果也是相同的. </p>
<p>4.压缩率设置对js文件不起作用, 压缩后大小总是相同的. </p>
<p>5.图片文件即使启用了gzip压缩大小也没有变化. </p>

	标签：<a href="http://www.imkevinyang.com/tags/gzip" title="GZip" rel="tag">GZip</a>, <a href="http://www.imkevinyang.com/tags/http" title="HTTP" rel="tag">HTTP</a>, <a href="http://www.imkevinyang.com/tags/iis" title="IIS" rel="tag">IIS</a>, <a href="http://www.imkevinyang.com/tags/iis6" title="IIS6" rel="tag">IIS6</a>, <a href="http://www.imkevinyang.com/tags/%e5%8e%8b%e7%bc%a9" title="压缩" rel="tag">压缩</a>, <a href="http://www.imkevinyang.com/categories/techarticles" title="技术随笔" rel="tag">技术随笔</a><br />

	<h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.imkevinyang.com/2010/05/64%e4%bd%8d%e7%b3%bb%e7%bb%9f%e4%b8%8biis7-isapi%e5%a4%84%e7%90%86%e5%99%a8%e5%8a%a0%e8%bd%bd%e5%a4%b1%e8%b4%a5.html" title="64位系统下IIS7 ISAPI处理器加载失败 (2010/05/05)">64位系统下IIS7 ISAPI处理器加载失败</a> </li>
	<li><a href="http://www.imkevinyang.com/2011/06/iis%e4%b8%ad%e4%bd%bf%e7%94%a8%e5%ad%90%e7%9b%ae%e5%bd%95%e6%96%87%e4%bb%b6%e4%bd%9c%e4%b8%ba%e9%bb%98%e8%ae%a4%e6%96%87%e6%a1%a3%ef%bc%88default-document%ef%bc%89%e6%9b%bf%e4%bb%a3%e9%87%8d%e5%ae%9a.html" title="IIS中使用子目录文件作为默认文档（Default Document）替代重定向 (2011/06/15)">IIS中使用子目录文件作为默认文档（Default Document）替代重定向</a> </li>
	<li><a href="http://www.imkevinyang.com/2010/02/silverlight%e5%90%af%e7%94%a8assembly-caching%e4%b9%8b%e5%90%8e%e9%93%81%e9%80%9a%e7%94%a8%e6%88%b7%e6%97%a0%e6%b3%95%e8%ae%bf%e9%97%ae.html" title="Silverlight启用Assembly Caching之后铁通用户无法访问 (2010/02/13)">Silverlight启用Assembly Caching之后铁通用户无法访问</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/11/%e3%80%90%e6%8e%a8%e8%8d%90%e3%80%91%e4%b8%a4%e6%ac%behttp%e6%b5%81%e9%87%8f%e5%88%86%e6%9e%90%e5%b7%a5%e5%85%b7%e7%9a%84%e6%af%94%e8%be%83.html" title="【推荐】两款HTTP流量分析工具的比较 (2009/11/08)">【推荐】两款HTTP流量分析工具的比较</a> </li>
	<li><a href="http://www.imkevinyang.com/2010/05/%e4%b8%ba%e4%bb%80%e4%b9%88iis77-5%e7%9a%84gzip%e4%b8%8d%e8%b5%b7%e4%bd%9c%e7%94%a8.html" title="为什么IIS7/7.5的Gzip不起作用 (2010/05/08)">为什么IIS7/7.5的Gzip不起作用</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/09/%e4%bd%bf%e7%94%a8%e7%9b%b8%e5%af%b9url%e6%97%a0%e7%bc%9d%e5%88%87%e6%8d%a2http-https.html" title="使用相对Url无缝切换HTTP-HTTPS (2009/09/18)">使用相对Url无缝切换HTTP-HTTPS</a> </li>
	<li><a href="http://www.imkevinyang.com/2010/05/%e5%bd%93google-analytics%e3%80%81firefox%e5%92%8ciis%e8%b5%b0%e5%88%b0%e4%ba%86%e4%b8%80%e8%b5%b7.html" title="当Google Analytics、Firefox和IIS走到了一起&#8230; (2010/05/29)">当Google Analytics、Firefox和IIS走到了一起&#8230;</a> </li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.imkevinyang.com/2009/06/%ef%bc%88%e8%bd%ac%ef%bc%89iis6%e4%b8%8a%e5%90%af%e7%94%a8gzip%e5%8e%8b%e7%bc%a9http%e5%8e%8b%e7%bc%a9-%e8%af%a6%e8%a7%a3.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced

Served from: www.imkevinyang.com @ 2012-02-08 00:34:03 -->
