<?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>呆呆的博客</title>
	<atom:link href="http://abingle.com/feed" rel="self" type="application/rss+xml" />
	<link>http://abingle.com</link>
	<description>还是你可爱...</description>
	<lastBuildDate>Mon, 14 Nov 2011 07:27:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>IE6值得你那么痛恨吗？啊</title>
		<link>http://abingle.com/defaultcategory/2011-03-05/ie6%e5%80%bc%e5%be%97%e4%bd%a0%e9%82%a3%e4%b9%88%e7%97%9b%e6%81%a8%e5%90%97%ef%bc%9f.html</link>
		<comments>http://abingle.com/defaultcategory/2011-03-05/ie6%e5%80%bc%e5%be%97%e4%bd%a0%e9%82%a3%e4%b9%88%e7%97%9b%e6%81%a8%e5%90%97%ef%bc%9f.html#comments</comments>
		<pubDate>Sat, 05 Mar 2011 02:27:31 +0000</pubDate>
		<dc:creator>呆呆</dc:creator>
				<category><![CDATA[defaultCategory]]></category>
		<category><![CDATA[ie6]]></category>

		<guid isPermaLink="false">http://abingle.com/?p=78</guid>
		<description><![CDATA[你不用ie6就算了，你还要别人不用IE6？俺抱着十分不解的态度，一群见风便是雨的家伙。还记得MS的维纳思计划吗？还记得ff铺天盖地的推广吗？MS之所以屡推出一个个失败的ie7,ie8吗？一个成熟的应用所用的技术必须是经过大量的白鼠检验过的，接触过很多成熟的网站项目，哪个不是用sql2000+asp呢？不用怀疑asp的能力。
大家喜欢用什么ff,ggchrom，我不反对，但您至少要明白，他们都是以牺牲内存做代价的。拿某人的说法就是，ie6必将长期与我们共同存在。

热门文章2010/04/10 -- 购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。 (12)2010/04/27 -- 强大实用批量域名查找工具下线,查找漏网之鱼 (5)2010/05/10 -- QQ网上世博，可以刷Q币 (5)2010/04/04 -- WordPress的固定链接 (4)2010/04/15 -- 批处理修改ie代理服务器设置之二 (4)]]></description>
			<content:encoded><![CDATA[<p>你不用<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/ie6" title="查看 ie6 的全部文章" target="_blank">ie6</a></span>就算了，你还要别人不用IE6？<br />俺抱着十分不解的态度，一群见风便是雨的家伙。<br />还记得MS的维纳思计划吗？<br />还记得ff铺天盖地的推广吗？<br />MS之所以屡推出一个个失败的ie7,ie8吗？<br />一个成熟的应用所用的技术必须是经过大量的白鼠检验过的，接触过很多成熟的网站项目，哪个不是用sql2000+asp呢？不用怀疑asp的能力。</p>
<p>大家喜欢用什么ff,ggchrom，我不反对，但您至少要明白，他们都是以牺牲内存做代价的。<br />拿某人的说法就是，<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/ie6" title="查看 ie6 的全部文章" target="_blank">ie6</a></span>必将长期与我们共同存在。</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=173f3d77-10bf-8049-a26b-1739dd62bdd4" /></div>
<h4  class="related_post_title">热门文章</h4><ul class="related_post"><li>2010/04/10 -- <a href="http://abingle.com/my-products/2010-04-10/batch-register-email.html" title="购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。">购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。</a> (12)</li><li>2010/04/27 -- <a href="http://abingle.com/defaultcategory/2010-04-27/batch-domain-digger.html" title="强大实用批量域名查找工具下线,查找漏网之鱼">强大实用批量域名查找工具下线,查找漏网之鱼</a> (5)</li><li>2010/05/10 -- <a href="http://abingle.com/defaultcategory/2010-05-10/qq%e7%bd%91%e4%b8%8a%e4%b8%96%e5%8d%9a%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%88%b7q%e5%b8%81.html" title="QQ网上世博，可以刷Q币">QQ网上世博，可以刷Q币</a> (5)</li><li>2010/04/04 -- <a href="http://abingle.com/php-articals/2010-04-04/wordpress%e7%9a%84%e5%9b%ba%e5%ae%9a%e9%93%be%e6%8e%a5.html" title="WordPress的固定链接">WordPress的固定链接</a> (4)</li><li>2010/04/15 -- <a href="http://abingle.com/defaultcategory/2010-04-15/setup-ieproxy-commandly.html" title="批处理修改ie代理服务器设置之二">批处理修改ie代理服务器设置之二</a> (4)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://abingle.com/defaultcategory/2011-03-05/ie6%e5%80%bc%e5%be%97%e4%bd%a0%e9%82%a3%e4%b9%88%e7%97%9b%e6%81%a8%e5%90%97%ef%bc%9f.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>delphi 之new</title>
		<link>http://abingle.com/delphi-articals/2011-02-25/delphi-%e4%b9%8bnew.html</link>
		<comments>http://abingle.com/delphi-articals/2011-02-25/delphi-%e4%b9%8bnew.html#comments</comments>
		<pubDate>Fri, 25 Feb 2011 02:10:19 +0000</pubDate>
		<dc:creator>呆呆</dc:creator>
				<category><![CDATA[delphi-articals]]></category>
		<category><![CDATA[delphi]]></category>
		<category><![CDATA[new]]></category>

		<guid isPermaLink="false">http://abingle.com/?p=197</guid>
		<description><![CDATA[原来在delphi ，我用的是7
new不但是过程，还是函数
本来是手误
var p:pVar;
p:=new(pvar) 和new(p)是一样的。
打开cpu窗口，产生的汇编代码是一模一样的。
帮助中说new 是一个procedure
第一句逻辑意义正确，第二句简练。
相关文章2010/04/23 -- 怎样调试delphi写的服务程序-com对象及hook程序 (2)]]></description>
			<content:encoded><![CDATA[<p>原来在<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/delphi" title="查看 delphi 的全部文章" target="_blank">delphi</a></span> ，我用的是7<br />
<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/new" title="查看 new 的全部文章" target="_blank">new</a></span>不但是过程，还是函数<br />
本来是手误<br />
var p:pVar;<br />
p:=<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/new" title="查看 new 的全部文章" target="_blank">new</a></span>(pvar) 和new(p)是一样的。<br />
打开cpu窗口，产生的汇编代码是一模一样的。<br />
帮助中说new 是一个procedure<br />
第一句逻辑意义正确，第二句简练。</p>
<h4  class="related_post_title">相关文章</h4><ul class="related_post"><li>2010/04/23 -- <a href="http://abingle.com/delphi-articals/2010-04-23/debug-delphi-services-com.html" title="怎样调试delphi写的服务程序-com对象及hook程序">怎样调试delphi写的服务程序-com对象及hook程序</a> (2)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://abingle.com/delphi-articals/2011-02-25/delphi-%e4%b9%8bnew.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>英文大小写，不绿色，不低碳</title>
		<link>http://abingle.com/defaultcategory/2011-02-22/terrible-char-incaseless.html</link>
		<comments>http://abingle.com/defaultcategory/2011-02-22/terrible-char-incaseless.html#comments</comments>
		<pubDate>Tue, 22 Feb 2011 03:22:43 +0000</pubDate>
		<dc:creator>呆呆</dc:creator>
				<category><![CDATA[defaultCategory]]></category>

		<guid isPermaLink="false">http://abingle.com/?p=192</guid>
		<description><![CDATA[英文大小写，不低碳。从计算机编程的角度来说，我们不得不花大量的时间来处理字符的大小写比较、转换。而且占用26个ascii码表，本来可以用来填充火星文的。一个完全没有必要的选择。
也许有一天，聪明的英文语系的人会去掉大写字母。
热门文章2010/04/10 -- 购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。 (12)2010/04/27 -- 强大实用批量域名查找工具下线,查找漏网之鱼 (5)2010/05/10 -- QQ网上世博，可以刷Q币 (5)2010/04/04 -- WordPress的固定链接 (4)2010/04/15 -- 批处理修改ie代理服务器设置之二 (4)]]></description>
			<content:encoded><![CDATA[<p>英文大小写，不低碳。从计算机编程的角度来说，我们不得不花大量的时间来处理字符的大小写比较、转换。而且占用26个ascii码表，本来可以用来填充火星文的。一个完全没有必要的选择。<br />
也许有一天，聪明的英文语系的人会去掉大写字母。</p>
<h4  class="related_post_title">热门文章</h4><ul class="related_post"><li>2010/04/10 -- <a href="http://abingle.com/my-products/2010-04-10/batch-register-email.html" title="购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。">购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。</a> (12)</li><li>2010/04/27 -- <a href="http://abingle.com/defaultcategory/2010-04-27/batch-domain-digger.html" title="强大实用批量域名查找工具下线,查找漏网之鱼">强大实用批量域名查找工具下线,查找漏网之鱼</a> (5)</li><li>2010/05/10 -- <a href="http://abingle.com/defaultcategory/2010-05-10/qq%e7%bd%91%e4%b8%8a%e4%b8%96%e5%8d%9a%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%88%b7q%e5%b8%81.html" title="QQ网上世博，可以刷Q币">QQ网上世博，可以刷Q币</a> (5)</li><li>2010/04/04 -- <a href="http://abingle.com/php-articals/2010-04-04/wordpress%e7%9a%84%e5%9b%ba%e5%ae%9a%e9%93%be%e6%8e%a5.html" title="WordPress的固定链接">WordPress的固定链接</a> (4)</li><li>2010/04/15 -- <a href="http://abingle.com/defaultcategory/2010-04-15/setup-ieproxy-commandly.html" title="批处理修改ie代理服务器设置之二">批处理修改ie代理服务器设置之二</a> (4)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://abingle.com/defaultcategory/2011-02-22/terrible-char-incaseless.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RewriteCond 和RewriteRule</title>
		<link>http://abingle.com/defaultcategory/2011-02-11/rewritecond-%e5%92%8crewriterule.html</link>
		<comments>http://abingle.com/defaultcategory/2011-02-11/rewritecond-%e5%92%8crewriterule.html#comments</comments>
		<pubDate>Fri, 11 Feb 2011 09:46:36 +0000</pubDate>
		<dc:creator>呆呆</dc:creator>
				<category><![CDATA[defaultCategory]]></category>
		<category><![CDATA[RewriteCond]]></category>
		<category><![CDATA[RewriteRule]]></category>

		<guid isPermaLink="false">http://abingle.com/?p=190</guid>
		<description><![CDATA[from:http://justcoding.javaeye.com/blog/547384
想弄个iis rewrite模块，找了个文章，录于下。
Apache的Mod_rewrite学习 (RewriteCond重写规则的条件)收藏
RewriteCond Syntax: RewriteCond TestString CondPattern [flags] 　　RewriteCond指令定义一条规则条件。在一条RewriteRule指令前面可能会有一条或多条RewriteCond指令，只有当自身的模板(pattern)匹配成功且这些条件也满足时规则才被应用于当前URL处理。　　TestString是一个字符串，除了包含普通的字符外，还可以包括下列的可扩展结构：
1.       $N,RewriteRule后向引用，其中(0 ]]></description>
			<content:encoded><![CDATA[<p>from:http://justcoding.javaeye.com/blog/547384<br />
想弄个iis rewrite模块，找了个文章，录于下。</p>
<p>Apache的Mod_rewrite学习 (<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/rewritecond" title="查看 RewriteCond 的全部文章" target="_blank">RewriteCond</a></span>重写规则的条件)收藏<br />
<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/rewritecond" title="查看 RewriteCond 的全部文章" target="_blank">RewriteCond</a></span> Syntax: RewriteCond TestString CondPattern [flags] 　　RewriteCond指令定义一条规则条件。在一条<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/rewriterule" title="查看 RewriteRule 的全部文章" target="_blank">RewriteRule</a></span>指令前面可能会有一条或多条RewriteCond指令，只有当自身的模板(pattern)匹配成功且这些条件也满足时规则才被应用于当前URL处理。　　TestString是一个字符串，除了包含普通的字符外，还可以包括下列的可扩展结构：<span id="more-190"></span><br />
1.       $N,<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/rewriterule" title="查看 RewriteRule 的全部文章" target="_blank">RewriteRule</a></span>后向引用，其中(0 <= N <= 9) 　　$N引用紧跟在RewriteCond后面的RewriteRule中模板中的括号中的模板在当前URL中匹配的数据。<br />
2.       %N,RewriteCond后向引用，其中(0 <= N <= 9) 　　%N引用最后一个RewriteCond的模板中的括号中的模板在当前URL中匹配的数据。<br />
3.       ${mapname:key|default},RewriteMap扩展. 具体参见RewriteMap<br />
4.       %{ NAME_OF_VARIABLE } ,服务器变量。 变量的名字如下表（分类显示） </p>
<p>5.        </p>
<p>6.       特别说明：<br />
o        SCRIPT_FILENAME和REQUEST_FILENAME变量含有相同的值，也就是Apache服务器内部数据结构request_rec的 filename字段的值。第一个变量是一个CGI变量，而第二个则与REQUEST_URI(含有request_rec数据结构中uri字段的值)保持一致。<br />
o        %{ENV:variable}中的variable可以是任何环境变量的名字。对其值的查找，先通过Apache内部的数据结构，（如找不到）再在Apache服务器进程中通过getenv()查找。<br />
o        %{HTTP:header}中的header可以是任何HTTP MIME-header的名字，其值通过查找HTTP请求信息而得。<br />
o        %{LA-U:variable} 用来引用后续API阶段中定义的、当前还不知道的值，具体实现是通过执行一个基于URL的内部的sub-request来决定的variable的最终的值。例如，假如你想在服务器范围内利用REMOTE_USER的值来完成重写，但这个值是在验证阶段设置的，而验证阶段是在URL转换阶段的后面。从另一方面讲，由于mod_rewrite在修补(fixup)API阶段进行目录范围的重写，而修补阶段在验证阶段的后面，所以此时只要用% {REMOTE_USER}就可以取得该值了。<br />
o        %{LA-F:variable}，执行一个基于文件名字(filename)的内部sub-request来决定variable的最终的值。大多数时间内，这和LA-U相同。</p>
<p>　　CondPattern是一个条件模板，也就是说，是一个扩展正则式（extended regular expression），用与跟TestString进行匹配。作为一个标准的扩展正则式，CondPattern有以下补充：<br />
1.       可以在模板串前增加一个!前缀，以用表示不匹配模板。但并不是所有的test都可以加！前缀。<br />
2.       CondPattern中可以使用以下特殊变量：<br />
o        '<CONDPATTERN' (小于，基于字母顺序) 将condPattern当作一个普通字符串，将它和TestString进行比较，当TestString 的字符小于CondPattern为真.<br />
o        '>CondPattern&#8217; (大于) 将condPattern当作一个普通字符串，将它和TestString进行比较，当TestString 的字符大于CondPattern为真.<br />
o        &#8216;=CondPattern&#8217; (等于) 将condPattern当作一个普通字符串，将它和TestString进行比较，当TestString 与CondPattern完全相同时为真.如果CondPattern只是 &#8220;&#8221; (两个引号紧挨在一起) 此时需TestString 为空字符串方为真.<br />
o        &#8216;-d&#8217; (是否为目录) 将testString当作一个目录名，检查它是否存在以及是否是一个目录.<br />
o        &#8216;-f&#8217; (是否是regular file) 将testString当作一个文件名，检查它是否存在以及是否是一个regular文件.<br />
o        &#8216;-s&#8217; (是否为长度不为0的regular文件) 将testString当作一个文件名，检查它是否存在以及是否是一个长度大于0的regular文件<br />
o        &#8216;-l&#8217; (是否为symbolic link) 将testString当作一个文件名，检查它是否存在以及是否是一个 symbolic link.<br />
o        &#8216;-F&#8217; (通过subrequest来检查某文件是否可访问) 检查TestString是否是一个合法的文件，而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性能。<br />
o        &#8216;-U&#8217; (通过subrequest来检查某个URL是否存在) 检查TestString是否是一个合法的URL，而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性能。<br />
　　[flags]是第三个参数，多个标志之间用逗号分隔。<br />
1.       &#8216;nocase|NC&#8217; (不区分大小写) 　　在扩展后的TestString和CondPattern中，比较时不区分文本的大小写。注意，这个标志对文件系统和subrequest检查没有影响.<br />
2.       &#8216;ornext|OR&#8217; (建立与下一个条件的或的关系) 　　默认的情况下，二个条件之间是AND的关系，用这个标志将关系改为OR。例如： RewriteCond %{REMOTE_HOST} ^host1.* [OR] RewriteCond %{REMOTE_HOST} ^host2.* [OR] RewriteCond %{REMOTE_HOST} ^host3.* RewriteRule &#8230; 如果没有[OR]标志，需要写三个条件/规则.<br />
例子：根据客户端浏览器的不同，返回不同的首页面。 RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* RewriteRule ^/$ /homepage.max.html [L] RewriteCond %{HTTP_USER_AGENT} ^Lynx.* RewriteRule ^/$ /homepage.min.html [L] RewriteRule ^/$ /homepage.std.html [L]<br />
当你在地址栏里输入 sina.com.cn  google.cn </p>
<p>看看有什么变化？是不是会自动跳转到 www.sina.com.cn    www.google.cn </p>
<p>这一技术通过apache的rewrite可以实现，当然你得把 不带www的域名指向你服务器的IP </p>
<p> 要是虚拟主机的话，得在viralhost段加入 ServerAlias xxx.com </p>
<p>然后打开重写引擎功能 </p>
<p> RewriteEngine On </p>
<p>能过rewritecond判断主机名是否带www </p>
<p>RewriteCond %{HTTP_HOST}  ^xxx\.com$ [NC] </p>
<p>然后来一条 </p>
<p>RewriteRule ^/(.*)$  http://www.xxx.com/$1 [R=301,L] </p>
<p>OK,重起apache，现在在浏览器中输入 xxx.com 看看是不是自动变成了 www.xxx.com 了呢。 </p>
<p>重新整理一下就是： </p>
<p>RewriteEngine On </p>
<p>RewriteCond %{HTTP_HOST} ^xxx\.com$ [NC] </p>
<p>RewriteRule ^/(.*)$  http://www.xxx.com/$1 [R=301,L] </p>
<p>源地址: http://blog.csdn.net/keyunq/archive/2008/06/11/2536875.aspx </p>
<p>一 .RewriteRule </p>
<p>Syntax: RewriteRule Pattern Substitution [flags] </p>
<p>　　一条RewriteRule指令，定义一条重写规则，规则间的顺序非常重要。对Apache1.2及以后的版本，模板(pattern)是一个POSIX正则式，用以匹配当前的URL。当前的URL不一定是用记最初提交的URL，因为可能用一些规则在此规则前已经对URL进行了处理。 </p>
<p>　　对mod_rewrite来说，！是个合法的模板前缀，表示“非”的意思，这对描述“不满足某种匹配条件”的情况非常方便，或用作最后一条默认规则。当使用！时，不能在模板中有分组的通配符，也不能做后向引用。 </p>
<p>　　当匹配成功后，Substitution会被用来替换相应的匹配，它除了可以是普通的字符串以外，还可以包括：<br />
1. $N,引用RewriteRule模板中匹配的 相关 字串，N表示序号,N=0..9<br />
2. %N,引用最后一个RewriteCond模板中匹配的数据，N表示序号<br />
3. %{VARNAME},服务器变量<br />
4. ${mapname:key|default},映射函数调用 </p>
<p>这些特殊内容的扩展，按上述顺序进行。<br />
　　一个URL的全部相关部分都会被Substitution替换，而且这个替换过程会一直持续到所有的规则都被执行完，除非明确地用L标志中断处理过程。<br />
　　当susbstitution有”-”前缀时，表示不进行替换，只做匹配检查。<br />
　　利用RewriteRule，可定义含有请求串(Query String)的URL，此时只需在Sustitution中加入一个？，表示此后的内容放入QUERY_STRING变量中。如果要清空一个 QUERY_STRING变量，只需要以？结束Substitution串即可。<br />
　　如果给一个Substitution增加一个 </p>
<p>1. &#8216;redirect|R [=code]&#8216; (强制重定向)<br />
　　给当前的URI增加前缀 </p>
<p>2. &#8216;forbidden|F&#8217; (强制禁止访问URL所指的资源)<br />
　　立即返回状态值403 (FORBIDDEN)的应答包。将这个标志与合适的RewriteConds 联合使用，可以阻断访问某些URL。 </p>
<p>3. &#8216;gone|G&#8217; (强制返回URL所指资源为不存在(gone))<br />
　　立即返回状态值410 (GONE)的应答包。用这个标志来标记URL所指的资源永久消失了. </p>
<p>4. # &#8216;proxy|P&#8217; (强制将当前URL送往代理模块（proxy module）)<br />
　　这个标志，强制将substitution当作一个发向代理模块的请求，并立即将共送往代理模块。因此，必须确保substitution串是一个合法的URI (如, 典型的情况是以 </p>
<p>5. &#8216;last|L&#8217; (最后一条规则)<br />
　　中止重写流程，不再对当前URL施加更多的重写规则。这相当于perl的last命令或C的break命令。 </p>
<p>6. &#8216;next|N&#8217; (下一轮)<br />
　　重新从第一条重写规则开始执行重写过程，新开的过程中的URL不应当与最初的URL相同。 这相当于Perl的next命令或C的continue命令. 千万小心不要产生死循环。 </p>
<p>7. # &#8216;chain|C&#8217; (将当前的规则与其后续规则綑绑(chained))<br />
　　当规则匹配时，处理过程与没有綑绑一样；如果规则不匹配，则綑绑在一起的后续规则也不在检查和执行。 </p>
<p>8. &#8216;type|T=MIME-type&#8217; (强制MIME类型)<br />
　　强制将目标文件的MIME-type为某MIME类型。例如，这可用来模仿mod_alias模块对某目录的ScriptAlias指定，通过强制将该目录下的所有文件的类型改为 “application/x-httpd-cgi”. </p>
<p>9. &#8216;nosubreq|NS&#8217; (used only if no internal sub-request )<br />
　　这个标志强制重写引擎跳过为内部sub-request的重写规则.例如，当mod_include试图找到某一目录下的默认文件时 (index.xxx)，sub-requests 会在Apache内部发生. Sub-requests并非总是有用的，在某些情况下如果整个规则集施加到它上面，会产生错误。利用这个标志可排除执行一些规则。 </p>
<p>10. &#8216;nocase|NC&#8217; (模板不区分大小写) </p>
<p>这个标志会使得模板匹配当前URL时忽略大小写的差别。 </p>
<p>11. &#8216;qsappend|QSA&#8217; (追加请求串(query string))<br />
　　这个标志，强制重写引擎为Substitution的请求串追加一部分串，则不是替换掉原来的。借助这个标志，可以使用一个重写规则给请求串增加更多的数据。 </p>
<p>12. &#8216;noescape|NE&#8217; (不对输出结果中的特殊字符进行转义处理)<br />
　　通常情况下，mod_write的输出结果中，特殊字符（如&#8217;%', &#8216;$&#8217;, &#8216;;&#8217;, 等)会转义为它们的16进制形式(如分别为&#8217;%25&#8242;, &#8216;%24&#8242;, and &#8216;%3B&#8217;）。这个标志会禁止mod_rewrite对输出结果进行此类操作。 这个标志只能在 Apache 1.3.20及以后的版本中使用。 </p>
<p>13. &#8216;passthrough|PT&#8217; (通过下一个处理器)<br />
　　这个标志强制重写引擎用filename字段的值来替换内部request_rec数据结构中uri字段的值。. 使用这个标志，可以使后续的其它URI－to-filename转换器的Alias、ScriptAlias、Redirect等指令，也能正常处理 RewriteRule指令的输出结果。用一个小例子来说明它的语义：如果要用mod_rewrite的重写引擎将/abc转换为/def,然后用 mod_alas将/def重写为ghi，则要：<br />
RewriteRule ^/abc(.*) /def$1 [PT]<br />
Alias /def /ghi<br />
如果PT标志被忽略，则mod_rewrite也能很好完成工作,如果., 将 uri=/abc/&#8230; 转换为filename=/def/&#8230; ，完全符合一个URI-to-filename转换器的动作。接下来 mod_alias 试图做 URI-to-filename 转换时就会出问题。<br />
注意:如果要混合都含有URL－to-filename转换器的不同的模块的指令，必须用这个标志。最典型的例子是mod_alias和mod_rewrite的使用。 </p>
<p>14. &#8217;skip|S=num&#8217; (跳过后面的num个规则)<br />
　　当前规则匹配时，强制重写引擎跳过后续的num个规则。用这个可以来模仿if-then-else结构：then子句的最后一条rule的标志是skip=N，而N是else子句的规则条数。 </p>
<p>15. &#8216;env|E=VAR:VAL&#8217; (设置环境变量)<br />
　　设置名为VAR的环境变量的值为VAL,其中VAL中可以含有正则式的后向引用($N或%N)。这个标志可以使用多次，以设置多个环境变量。这儿设置的变量，可以在多种情况下被引用，如在XSSI或CGI中。另外，也可以在RewriteCond模板中以%{ENV:VAR}的形式被引用。 </p>
<p>16.  </p>
<p>   注意：一定不要忘记，在服务器范围内的配置文件中，模板(pattern)用以匹配整个URL;而在目录范围内的配置文件中，目录前缀总是被自动去掉后再进行模板匹配的，且在替换完成后自动再加上这个前缀。这个功能对很多种类的重写是非常重要的，因为如果没有去前缀，则要进行父目录的匹配，而父目录的信息并不是总能得到的。一个例外是，当substitution中有http://打头时，则不再自动增加前缀了，如果P标志出现，则会强制转向代理。</p>
<p>注意：如果要在某个目录范围内启动重写引擎，则需要在相应的目录配置文件中设置“RewriteEngine on”，且目录的“Options FollowSymLinks”必须设置。如果管理员由于安全原因没有打开FollowSymLinks，则不能使用重写引擎。 </p>
<p>http://hostname 开头)，否则会从代理模块得到一个错误. 这个标志，是ProxyPass指令的一个更强劲的实现，将远程请求(remote stuff)映射到本地服务器的名字空间(namespace)中来。<br />
　　注意，使用这个功能必须确保代理模块已经编译到Apache 服务器程序中了. 可以用“httpd -l ”命令，来检查输出中是否含有mod_proxy.c来确认一下。如果没有，而又需要使用这个功能，则需要重新编译&#8220;httpd&#8221;程序并使用 mod_proxy有效。 http://thishost[:thisport]/ ，从而生成一个新的URL，强制生成一个外部重定向(external redirection，指生的URL发送到客户端，由客户端再次以新的URL发出请求，虽然新URL仍指向当前的服务器). 如果没有指定的code值，则HTTP应答以状态值302 (MOVED TEMPORARILY)，如果想使用300-400（不含400）间的其它值可以通过在code的位置以相应的数字指定，也可以用标志名指定： temp (默认值), permanent, seeother. </p>
<p>注意，当使用这个标志时，要确实substitution是个合法的URL，这个标志只是在URL前增加http://thishost[:thisport]/ 前缀而已，重写操作会继续进行。如果要立即将新URL重定向，用L标志来中重写流程。 http://thishost[:port ]的前缀，则mod_rewrite会自动将此前缀去掉。因此，利用 http://thisthost 做一个无条件的重定向到自己，将难以奏效。要实现这种效果，必须使用R标志。<br />
　　Flags是可选参数，当有多个标志同时出现时，彼此间以逗号分隔。</p>
<h4  class="related_post_title">热门文章</h4><ul class="related_post"><li>2010/04/10 -- <a href="http://abingle.com/my-products/2010-04-10/batch-register-email.html" title="购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。">购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。</a> (12)</li><li>2010/04/27 -- <a href="http://abingle.com/defaultcategory/2010-04-27/batch-domain-digger.html" title="强大实用批量域名查找工具下线,查找漏网之鱼">强大实用批量域名查找工具下线,查找漏网之鱼</a> (5)</li><li>2010/05/10 -- <a href="http://abingle.com/defaultcategory/2010-05-10/qq%e7%bd%91%e4%b8%8a%e4%b8%96%e5%8d%9a%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%88%b7q%e5%b8%81.html" title="QQ网上世博，可以刷Q币">QQ网上世博，可以刷Q币</a> (5)</li><li>2010/04/04 -- <a href="http://abingle.com/php-articals/2010-04-04/wordpress%e7%9a%84%e5%9b%ba%e5%ae%9a%e9%93%be%e6%8e%a5.html" title="WordPress的固定链接">WordPress的固定链接</a> (4)</li><li>2010/04/15 -- <a href="http://abingle.com/defaultcategory/2010-04-15/setup-ieproxy-commandly.html" title="批处理修改ie代理服务器设置之二">批处理修改ie代理服务器设置之二</a> (4)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://abingle.com/defaultcategory/2011-02-11/rewritecond-%e5%92%8crewriterule.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何编程实现ISAPI筛选器 (呆呆abingle.com)</title>
		<link>http://abingle.com/delphi-articals/2011-02-08/programming-of-isapi-filter.html</link>
		<comments>http://abingle.com/delphi-articals/2011-02-08/programming-of-isapi-filter.html#comments</comments>
		<pubDate>Mon, 07 Feb 2011 19:05:57 +0000</pubDate>
		<dc:creator>呆呆</dc:creator>
				<category><![CDATA[delphi-articals]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[isapiFilter]]></category>

		<guid isPermaLink="false">http://abingle.com/?p=187</guid>
		<description><![CDATA[如何编程实现ISAPI筛选器 (呆呆abingle.com原创文章，欢迎保留作者信息转载)
本文将详细地讲解如何制作isapi筛选器，以iis6.0为实验平台，结合实例代码，讲讲isapi（isapiFilter）筛选器制作。水平有限，有些地方谨凭主观臆测。
isapi传统意义应该是isapiExtention，是与cgi(但比cgi效率高)相并列的一组概念，与filter是两种完全不同的概念。这是微软一种不负责任的定义，Internet Server Application Programming Interface，不做深究。
isapifilter是iis的一种回调机制。
做一个dll，只要实现两个导出函数就可以被iis加载。
Function GetFilterVersion(Var Ver: THTTP_FILTER_VERSION): BOOL; Stdcall;
ver是一个纪录，传递描述和一些参数（80-ssl类型,优先级,以及需要得到的通知类型）
Function HttpFilterProc(Var pfc: THTTP_FILTER_CONTEXT;NotificationType: DWORD; pvNotification: pointer): DWORD; Stdcall;
pfc是一个当前过滤器的环境纪录，notificationtype，就是上面所说的通知类型，pvnotification一个数据指针，依据不同的通知类型而有不同的定义。
上面两个导出函数实现了就可以正常工作。
Function TerminateFilter (dwFlags : DWORD): BOOL stdcall;
这个也可以导出，用于iis释放filter时做一些清理收场工作，可有可无。
下面为代码：
Function GetFilterVersion(Var Ver: THTTP_FILTER_VERSION): BOOL; Stdcall;
Begin
Ver.lpszFilterDesc := &#8216;dyydyysoft For iis5-6&#8242;;
Ver.dwFilterVersion := MakeLong(HSE_VERSION_MINOR, HSE_VERSION_MAJOR);
Ver.dwFlags := SF_NOTIFY_NONSECURE_PORT //非ssl
Or SF_NOTIFY_SECURE_PORT //ssl
Or SF_NOTIFY_ORDER_DEFAULT //缺省优先级，按照msdn上说 ,default应该是中优先级，但isapi4中为low，可以手工修正。当然也无所谓，优先级只是排定几个isapifilter加载时的顺序，谁也不会往筛选器上加几个，影响iis效率的。
Or SF_NOTIFY_URL_MAP ;//拦截的通知类型，这里指定了,才会在后面的httpfilterproc回调中得到宿主iis的通知。
Result := True;
End;
delphi中怎么导出函数呢？export or exports　有什么区别? 其实我也不明白。查看帮助，其实export是16位编程用的导出函数的方法，而32位编程用exports导出。
所以function a();bool;stdcall;export;不能导出函数，只是为了向前兼容，要用exports导出。如下：
exports funca,funcb;
好了，下面是一个完整的代码，编译后只有15.5K，只是简单注册了下通知，而没有实际功能。
_____________________________________________________________________
library IISfilter;
uses [...]]]></description>
			<content:encoded><![CDATA[<p>如何编程实现ISAPI筛选器 (呆呆abingle.com原创文章，欢迎保留作者信息转载)</p>
<p>本文将详细地讲解如何制作isapi筛选器，以<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/iis" title="查看 iis 的全部文章" target="_blank">iis</a></span>6.0为实验平台，结合实例代码，讲讲isapi（<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/isapifilter" title="查看 isapiFilter 的全部文章" target="_blank">isapiFilter</a></span>）筛选器制作。水平有限，有些地方谨凭主观臆测。</p>
<p>isapi传统意义应该是isapiExtention，是与cgi(但比cgi效率高)相并列的一组概念，与filter是两种完全不同的概念。这是微软一种不负责任的定义，Internet Server Application Programming Interface，不做深究。</p>
<p>isapifilter是<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/iis" title="查看 iis 的全部文章" target="_blank">iis</a></span>的一种回调机制。</p>
<p>做一个dll，只要实现两个导出函数就可以被<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/iis" title="查看 iis 的全部文章" target="_blank">iis</a></span>加载。<br />
Function GetFilterVersion(Var Ver: THTTP_FILTER_VERSION): BOOL; Stdcall;<br />
ver是一个纪录，传递描述和一些参数（80-ssl类型,优先级,以及需要得到的通知类型）<br />
Function HttpFilterProc(Var pfc: THTTP_FILTER_CONTEXT;NotificationType: DWORD; pvNotification: pointer): DWORD; Stdcall;<br />
pfc是一个当前过滤器的环境纪录，notificationtype，就是上面所说的通知类型，pvnotification一个数据指针，依据不同的通知类型而有不同的定义。</p>
<p>上面两个导出函数实现了就可以正常工作。<br />
Function TerminateFilter (dwFlags : DWORD): BOOL stdcall;<br />
这个也可以导出，用于iis释放filter时做一些清理收场工作，可有可无。</p>
<p>下面为代码：<br />
Function GetFilterVersion(Var Ver: THTTP_FILTER_VERSION): BOOL; Stdcall;<br />
Begin<br />
Ver.lpszFilterDesc := &#8216;dyydyysoft For iis5-6&#8242;;<br />
Ver.dwFilterVersion := MakeLong(HSE_VERSION_MINOR, HSE_VERSION_MAJOR);<br />
Ver.dwFlags := SF_NOTIFY_NONSECURE_PORT //非ssl<br />
Or SF_NOTIFY_SECURE_PORT //ssl<br />
Or SF_NOTIFY_ORDER_DEFAULT //缺省优先级，按照msdn上说 ,default应该是中优先级，但isapi4中为low，可以手工修正。当然也无所谓，优先级只是排定几个isapifilter加载时的顺序，谁也不会往筛选器上加几个，影响iis效率的。<br />
Or SF_NOTIFY_URL_MAP ;//拦截的通知类型，这里指定了,才会在后面的httpfilterproc回调中得到宿主iis的通知。<br />
Result := True;<br />
End;</p>
<p>delphi中怎么导出函数呢？export or exports　有什么区别? 其实我也不明白。查看帮助，其实export是16位编程用的导出函数的方法，而32位编程用exports导出。<br />
所以function a();bool;stdcall;export;不能导出函数，只是为了向前兼容，要用exports导出。如下：<br />
exports funca,funcb;</p>
<p>好了，下面是一个完整的代码，编译后只有15.5K，只是简单注册了下通知，而没有实际功能。<br />
_____________________________________________________________________</p>
<p>library IISfilter;<br />
uses ISAPI4,Windows;<br />
Function GetFilterVersion(Var Ver: THTTP_FILTER_VERSION): BOOL; Stdcall;<br />
Begin<br />
Ver.lpszFilterDesc := &#8216;dyydyysoft For iis5-6 abingle.com&#8217;;<br />
Ver.dwFilterVersion := MakeLong(HSE_VERSION_MINOR, HSE_VERSION_MAJOR);<br />
Ver.dwFlags := SF_NOTIFY_NONSECURE_PORT //非ssl<br />
Or SF_NOTIFY_SECURE_PORT //ssl<br />
Or SF_NOTIFY_ORDER_DEFAULT //缺省优先级，按照msdn上说 ,default应该是中优先级，但isapi4中为low，可以手工修正。当然也无所谓，优先级只是排定几个isapifilter加载时的顺序，谁也不会往筛选器上加几个，影响iis效率的。<br />
Or SF_NOTIFY_URL_MAP ;//拦截的通知类型，这里指定了,才会在后面的httpfilterproc回调中得到宿主iis的通知。<br />
Result := True;<br />
End;<br />
Function HttpFilterProc(Var pfc: THTTP_FILTER_CONTEXT;NotificationType: DWORD; pvNotification: pointer): DWORD; Stdcall;<br />
begin<br />
Result := SF_STATUS_REQ_NEXT_NOTIFICATION;//继续处理。<br />
end;<br />
Exports<br />
GetFilterVersion,<br />
HttpFilterProc;<br />
begin<br />
end.<br />
_______________________________________________________________________________________</p>
<p><span id="more-187"></span>好的，在iis中配置上述dll,注意此filter如果在ntfs目录下，请给他iis_wpg运行权限<br />
OK,it works well.<br />
呆呆在05年对isapi的编写比较熟悉，现在已经忘得差不多了。之所以成此文，为了以后想弄个时，不必再去查资料。梳理下。水平有限，错误难免，看客海涵。<br />
接着来看下filter的工作过程。</p>
<p>一、多筛选器加载顺序:　1 全局过滤器优先 2优先权高低　3权限相同，按在iis中配置中的列表顺序。其实这也是Function GetFilterVersion在iis中被调用的顺序.<br />
二、筛选器事件的发生顺序：也就是Function HttpFilterProc中notificationType中事件发生的顺序。[http://msdn.microsoft.com/en-us/library/ms524855%28VS.90%29.aspx]<br />
1) SF_NOTIFY_READ_RAW_DATA : 从客户端http读入数据时，事件发生。这时pvnotification是一个HTTP_FILTER_RAW_DATA 结构。注意：ms中有说明(哪篇文章可以自己查)，iis6以混合模式运行时，网站筛选器不会触发这个事件，全局筛选器可以触发。 以隔离模式(iis5兼容模式)运行，两种筛选器都可以触发。<br />
可能回发生多次。<br />
HTTP_FILTER_RAW_DATA {<br />
PVOID pvInData;<br />
DWORD cbInData;<br />
DWORD cbInBuffer;<br />
DWORD dwReserved;<br />
}<br />
2) SF_NOTIFY_PREPROC_HEADERS : IIS 预 处 理HTTP 请 求 包 头 后 发 生。客户端发送来的请求还没被服务器执行，估计可以理解为被格式化了下，预处理嘛。 pvnotification指向一个HTTP_FILTER_PREPROC_HEADERS 结构。<br />
HTTP_FILTER_PREPROC_HEADERS {<br />
BOOL (WINAPI * GetHeader) ();<br />
BOOL (WINAPI * SetHeader) ();<br />
BOOL (WINAPI * AddHeader) ();<br />
DWORD HttpStatus;<br />
DWORD dwReserved;<br />
} 每个请求只会发生一次。这里可以实现防盗链技术，我想拦截得越早，效率也许就越高。</p>
<p>3) SF_NOTIFY_URL_MAP IIS : 试 图 将URL 解 释 为 物 理 文 件 时。 过 滤 器 可 以 将 请 求 重 定 向 到 其 他 的 文 件。防盗链技术也可以在此检测refer,cookie，而中断实际文件指向。<br />
在这里，还可以做脚本文件加密技术，把已经加密的asp文件，读出来，解密到temp目录（如以script_name的md5值为文件名），修改数据，让他指向这个新文件。pvnotification指向一个<br />
HTTP_FILTER_URL_MAP {<br />
const CHAR * pszURL;<br />
CHAR * pszPhysicalPath;<br />
DWORD cbPathBuff;<br />
}结构。 这个事件可能会触发多次。</p>
<p>4)SF_NOTIFY_AUTHENTICATION :IIS 试 图 验 证 用 户 身 份 时 发 生。每次连接时触发这个事件，不会在每个请求中触发，但明确发送auth_user除外。<br />
数据指针pvnotification指向 HTTP_FILTER_AUTHENT {<br />
CHAR * pszUser;<br />
DWORD cbUserBuff;//pszuser长度<br />
CHAR * pszPassword;<br />
DWORD cbPasswordBuff;//pszpassword长度<br />
}　我想可不可以把pszuser设为administrator,来提权呢？比如管理服务器。或许这是个好的想法。<br />
或者实现一个自定义验证过程。假想过程：</p>
<p>5) SF_NOTIFY_AUTH_COMPLETE 验证完成时发生。<br />
pvnotification 指向THTTP_FILTER_AUTH_COMPLETE_INFO {<br />
BOOL (WINAPI * GetHeader) ();<br />
BOOL (WINAPI * SetHeader) ();<br />
BOOL (WINAPI * AddHeader) ();<br />
BOOL (WINAPI * GetUserToken) ();<br />
DWORD HttpStatus;<br />
BOOL fResetAuth;<br />
DWORD dwReserved;<br />
}结构，和第二步中HTTP_FILTER_PREPROC_HEADERS十分相似，但我查来查去，似乎没有可以改变的数据，暂不研究他。</p>
<p>6*) SF_NOTIFY_ACCESS_DENIED 访问拒绝时发生。<br />
　msdn中没有说明这个事件的顺序。（见http://msdn.microsoft.com/en-us/library/ms524855%28VS.90%29.aspx）<br />
　pvnotification 指向 HTTP_FILTER_ACCESS_DENIED {<br />
const CHAR * pszURL;<br />
const CHAR * pszPhysicalPath;<br />
DWORD dwReason;<br />
}<br />
pszURL<br />
Points to a null-terminated string that specifies the URL that requested access to the resource.<br />
pszPhysicalPath<br />
The physical path of the resource that was requested.<br />
dwReason<br />
A DWORD date type containing flags that indicate the reasons for the denial. Can have one of the following values. Value Meaning<br />
SF_DENIED_LOGON The client could not be logged on.<br />
SF_DENIED_RESOURCE The resource was denied by a Windows discretionary access control list (DACL).<br />
SF_DENIED_FILTER A Web (ISAPI) filter denied the request.<br />
SF_DENIED_APPLICATION An ISAPI extension or CGI application denied the request.<br />
SF_DENIED_BY_CONFIG The server configuration denied the request. For example, disabling anonymous requests on the server would generate this filter notification when a user without credentials tried to make a request to the server.<br />
Remarks<br />
This structure indicates that access to the requested resource has been denied by the server. The structure is generated when there has been a logon failure, or when a user requests a resource that has an associated DACL that does not include the logged-on user.<br />
The server will automatically include the supported authentication schemes when an ISAPI extension, filter, or CGI script returns a 401 Access Denied error code.<br />
摘抄原版注释于上。<br />
7) SF_NOTIFY_READ_RAW_DATA 这个事件可能会再次触发，例如 当客户端上传文件、图片等。<br />
 <img src='http://abingle.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> SF_NOTIFY_SEND_RESPONSE 服务器发送头给浏览器客户端。<br />
pvnotification 指向一个HTTP_FILTER_SEND_RESPONSE {<br />
BOOL (WINAPI * GetHeader) ();<br />
BOOL (WINAPI * SetHeader) ();<br />
BOOL (WINAPI * AddHeader) ();<br />
DWORD HttpStatus;<br />
DWORD dwReserved;<br />
}<br />
9) SF_NOTIFY_SEND_RAW_DATA 数据组织完毕，发送数据到浏览器之前。<br />
pvnotification 指向 HTTP_FILTER_RAW_DATA {<br />
PVOID pvInData;<br />
DWORD cbInData;<br />
DWORD cbInBuffer;<br />
DWORD dwReserved;<br />
} 结构。这时可以对pvindata进行修改==操作。</p>
<p>10) SF_NOTIFY_END_OF_REQUEST ,每次请求后的触发事件。<br />
Sent when the end of a request is detected. Provided without a notification-specific structure, the pointer to which contains a NULL value.<br />
pvnotification指向一个nil，无值。仅通知。这里你可以做一些清理工作，例如把一个request中分配的指针、内存清理回收。<br />
11) SF_NOTIFY_LOG<br />
写IIS日志之前触发。pvnotification指向HTTP_FILTER_LOG {<br />
const CHAR * pszClientHostName;<br />
const CHAR * pszClientUserName;<br />
const CHAR * pszServerName;<br />
const CHAR * pszOperation;<br />
const CHAR * pszTarget;<br />
const CHAR * pszParameters;<br />
DWORD dwHttpStatus;<br />
DWORD dwWin32Status;<br />
DWORD dwBytesSent;<br />
DWORD dwBytesRecvd;<br />
DWORD msTimeForProcessing;<br />
}结构。可以修改使记入日志的内容更清晰，或者干脆实现自己的日志。</p>
<p>12) SF_NOTIFY_END_OF_NET_SESSION 在keep-alive连接中，tcp连接不被重置，这样一个session会包括多个request. pvnotification指向nil。主要用来做资源回收，清理工作。<br />
微软推荐关注 SF_NOTIFY_END_OF_NET_SESSION事件，以便在每次网络会话结束时就释放资源，这样可以减轻服务器的负荷。</p>
<p>以上就是事件触发的过程。在事件触发的回调函数中，有一个参数，Var pfc: THTTP_FILTER_CONTEXT;　pfc是过滤器的上下文，可以认为是一个session变量，他贯穿于每次请求的始终。<br />
下面，将探讨这个结构的用法。<br />
HTTP_FILTER_CONTEXT<br />
{<br />
DWORD cbSize; //IN 本结构的大小,不关心<br />
DWORD Revision; //IN getversion 传入的HTTP_FILTER_REVISION,不关心<br />
PVOID ServerContext; //IN 保留<br />
DWORD ulReserved; //IN 保留<br />
BOOL fIsSecurePort; //IN 是否是安全端口<br />
PVOID pFilterContext; //IN/OUT ,这个留着给我们用的，我们可以用来识别在多事件触发时是哪个上下文。挺有用的。<br />
//如pfilterContext:=pointer(0)[就是nil] 或pointer(1),然后case integer(pfilterContext) 来区分。<br />
//或者pfilterContext:=strNew(&#8216;handledSession&#8217;);然后对比pfilterContext的值来做一个逻辑判断。当然最后(在SF_NOTIFY_END_OF_REQUEST或SF_NOTIFY_END_OF_NET_SESSION事件到来时)记得回收这个指针。<br />
BOOL (WINAPI * GetServerVariable) (<br />
struct _HTTP_FILTER_CONTEXT * pfc,<br />
LPSTR lpszVariableName,<br />
LPVOID lpvBuffer,<br />
LPDWORD lpdwSize<br />
);<br />
//getserverVariable 可以为我们提供很多用来判断的条件，如cookie,refer==。<br />
//其中lpszVariableName可以是如下的值:<br />
___________________________________________</p>
<p>ALL_HTTP<br />
All HTTP headers sent by the client.</p>
<p>ALL_RAW<br />
Retrieves all headers in raw form. The difference between ALL_RAW and ALL_HTTP is that ALL_HTTP places an HTTP_ prefix before the header name and the header name is always capitalized. In ALL_RAW the header name and values appear as they are sent by the client.</p>
<p>APP_POOL_ID</p>
<p>IIS 5.1 and earlier: This server variable is not available.<br />
Returns the name of the application pool that is running in the IIS worker process that is handling the request.</p>
<p>There is also an APP_POOL_ID environment variable that is available to applications that are running in the IIS worker process.</p>
<p>APPL_MD_PATH<br />
Retrieves the metabase path of the application.</p>
<p>APPL_PHYSICAL_PATH<br />
Retrieves the physical path corresponding to the metabase path in APPL_MD_PATH.</p>
<p>AUTH_PASSWORD<br />
The value entered in the client&#8217;s authentication dialog. This variable is available only if Basic authentication is used.</p>
<p>AUTH_TYPE<br />
The authentication method that the server uses to validate users when they attempt to access a protected script.</p>
<p>It does not mean that the user was authenticated if AUTH_TYPE contains a value and the authentication scheme is not Basic or integrated Windows authentication. The server allows authentication schemes it does not natively support because an ISAPI filter may be able to handle that particular scheme.</p>
<p>AUTH_USER<br />
The name of the user as it is derived from the authorization header sent by the client, before the user name is mapped to a Windows account. This variable is no different from REMOTE_USER. If you have an authentication filter installed on your Web server that maps incoming users to accounts, use LOGON_USER to view the mapped user name.</p>
<p>CACHE_URL</p>
<p>IIS 5.1 and earlier: This server variable is not available.<br />
For use in ISAPI applications only. Returns the unambiguous name for the current URL. It is necessary to use the Unicode version of this variable in conjunction with the kernel mode cache invalidation function to evict entries placed in the cache by HSE_REQ_VECTOR_SEND.</p>
<p>Note:<br />
The server variable &#8220;UNICODE_CACHE_URL&#8221; is used in conjunction with the cache invalidation function retrieved by the HSE_REQ_GET_CACHE_INVALIDATION_CALLBACK function. This function invalidates responses cached in HTTP.SYS, whether those responses are produced by requests or by ISAPIs calling HSE_REQ_VECTOR_SEND.<br />
CERT_COOKIE<br />
Unique ID for the client certificate, returned as a string. This can be used as a signature for the whole client certificate.</p>
<p>CERT_FLAGS<br />
bit0 is set to 1 if the client certificate is present.</p>
<p>bit1 is set to 1 if the certification authority of the client certificate is invalid (that is, it is not in the list of recognized certification authorities on the server).</p>
<p>If bit 1 of CERT_FLAGS is set to 1, indicating that the certificate is invalid, IIS version 4.0 and later will reject the certificate. Earlier versions of IIS will not reject the certificate.</p>
<p>CERT_ISSUER<br />
Issuer field of the client certificate (O=MS, OU=IAS, CN=user name, C=USA).</p>
<p>CERT_KEYSIZE<br />
Number of bits in the Secure Sockets Layer (SSL) connection key size. For example, 128.</p>
<p>CERT_SECRETKEYSIZE<br />
Number of bits in server certificate private key. For example, 1024.</p>
<p>CERT_SERIALNUMBER<br />
Serial number field of the client certificate.</p>
<p>CERT_SERVER_ISSUER<br />
Issuer field of the server certificate.</p>
<p>CERT_SERVER_SUBJECT<br />
Subject field of the server certificate.</p>
<p>CERT_SUBJECT<br />
Subject field of the client certificate.</p>
<p>CONTENT_LENGTH<br />
The length of the content as given by the client.</p>
<p>CONTENT_TYPE<br />
The data type of the content. Used with queries that have attached information, such as the HTTP queries GET, POST, and PUT.</p>
<p>GATEWAY_INTERFACE<br />
The revision of the CGI specification used by the server. The format is CGI/revision.</p>
<p>HEADER_</p>
<p>IIS 5.1 and earlier: This server variable is not available.<br />
The value stored in the header . Any header other than those listed in this table must be preceded by &#8220;HEADER_&#8221; in order for the ServerVariables collection to retrieve its value. This is useful for retrieving custom headers.</p>
<p>Note:<br />
Unlike HTTP_, all characters in HEADER_ are interpreted as-is. For example, if you specify HEADER_MY_HEADER, the server searches for a request header named MY_HEADER.<br />
HTTP_<br />
The value stored in the header . Any header other than those listed in this table must be preceded by &#8220;HTTP_&#8221; in order for the ServerVariables collection to retrieve its value. This is useful for retrieving custom headers.</p>
<p>Note:<br />
The server interprets any underscore (_) characters in as dashes in the actual header. For example, if you specify HTTP_MY_HEADER, the server searches for a request header named MY-HEADER.<br />
HTTP_ACCEPT<br />
Returns the value of the Accept header that contains a list of accepted formats, for example, &#8220;image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel&#8221;.</p>
<p>The values of the fields for the HTTP_ACCEPT variable are concatenated, and separated by a comma (,).</p>
<p>HTTP_ACCEPT_ENCODING<br />
Returns a list of accepted encoding types, for example, &#8220;gzip, deflate&#8221;.</p>
<p>HTTP_ACCEPT_LANGUAGE<br />
Returns a string describing the language to use for displaying content.</p>
<p>HTTP_CONNECTION<br />
Returns a string describing the connection type, for example, &#8220;Keep-Alive&#8221;.</p>
<p>HTTP_COOKIE<br />
Returns the cookie string that was included with the request.</p>
<p>HTTP_HOST<br />
Returns the name of the Web server. This may or may not be the same as SERVER_NAME depending on type of name resolution you are using on your Web server (IP address, host header).</p>
<p>HTTP_METHOD<br />
The method used to make the request (same as REQUEST_METHOD).</p>
<p>HTTP_REFERER<br />
Returns a string that contains the URL of the page that referred the request to the current page using an HTML <a>tag. Note that the URL is the one that the user typed into the browser address bar, which may not include the name of a default document.</a></p>
<p>If the page is redirected, HTTP_REFERER is empty.</p>
<p>HTTP_REFERER is not a mandatory member of the HTTP specification.</p>
<p>HTTP_URL<br />
Returns the raw, encoded URL, for example, &#8220;/vdir/default.asp?querystring&#8221;.</p>
<p>HTTP_USER_AGENT<br />
Returns a string describing the browser that sent the request.</p>
<p>HTTP_VERSION<br />
The name and version of the request protocol (the raw form of SERVER_PROTOCOL).</p>
<p>HTTPS<br />
Returns ON if the request came in through a secure channel (for example, SSL); or it returns OFF, if the request is for an insecure channel.</p>
<p>HTTPS_KEYSIZE<br />
Number of bits in the SSL connection key size. For example, 128.</p>
<p>HTTPS_SECRETKEYSIZE<br />
Number of bits in the server certificate private key. For example, 1024.</p>
<p>HTTPS_SERVER_ISSUER<br />
Issuer field of the server certificate.</p>
<p>HTTPS_SERVER_SUBJECT<br />
Subject field of the server certificate.</p>
<p>INSTANCE_ID<br />
The ID for the IIS instance in textual format. If the instance ID is 1, it appears as a string. You can use this variable to retrieve the ID of the Web server instance (in the metabase) to which the request belongs.</p>
<p>INSTANCE_META_PATH<br />
The metabase path for the instance of IIS that responds to the request.</p>
<p>LOCAL_ADDR<br />
Returns the server address on which the request came in. This is important on computers where there can be multiple IP addresses bound to the computer, and you want to find out which address the request used.</p>
<p>LOGON_USER<br />
The Windows account that the user is impersonating while connected to your Web server. Use REMOTE_USER, UNMAPPED_REMOTE_USER, or AUTH_USER to view the raw user name that is contained in the request header. The only time LOGON_USER holds a different value than these other variables is if you have an authentication filter installed.</p>
<p>PATH_INFO<br />
Path information, as given by the client, for example, &#8220;/vdir/myisapi.dll/zip&#8221;. If this information comes from a URL, it is decoded by the server before it is passed to the CGI script or ISAPI filter.</p>
<p>If the AllowPathInfoForScriptMappings metabase property is set to true (to support exclusive CGI functionality), PATH_INFO will only contain &#8220;/zip&#8221; and ISAPI applications such as ASP will break.</p>
<p>PATH_TRANSLATED<br />
The physical path that maps to the virtual path in PATH_INFO, for example, &#8220;c:\inetpub\wwwroot\vdir\myisapi.dll&#8221;. This variable is used by IIS during the processing of ISAPI applications.</p>
<p>If the AllowPathInfoForScriptMappings metabase property is set to true (to support exclusive CGI functionality), PATH_INFO will only contain &#8220;/zip&#8221; and ISAPI applications such as ASP will break.</p>
<p>QUERY_STRING<br />
Query information stored in the string following the question mark (?) in the HTTP request.</p>
<p>REMOTE_ADDR<br />
The IP address of the remote host that is making the request.</p>
<p>REMOTE_HOST<br />
The name of the host that is making the request. If the server does not have this information, it will set REMOTE_ADDR and leave this empty.</p>
<p>REMOTE_PORT<br />
The client port number of the TCP connection.</p>
<p>REMOTE_USER<br />
The name of the user as it is derived from the authorization header sent by the client, before the user name is mapped to a Windows account. If you have an authentication filter installed on your Web server that maps incoming users to accounts, use LOGON_USER to view the mapped user name.</p>
<p>REQUEST_METHOD<br />
The method used to make the request. For HTTP, this can be GET, HEAD, POST, and so on.</p>
<p>SCRIPT_NAME<br />
A virtual path to the script being executed, for example, &#8220;/vdir/default.asp&#8221;. This is used for self-referencing URLs.</p>
<p>SCRIPT_TRANSLATED</p>
<p>IIS 5.1 and earlier: This server variable is not available.<br />
The canonical physical path to the script listed in SCRIPT_NAME, for example, &#8220;\\?\c:\inetpub\wwwroot\vdir\default.asp&#8221;.</p>
<p>SERVER_NAME<br />
The server&#8217;s host name, DNS alias, or IP address as it would appear in self-referencing URLs.</p>
<p>SERVER_PORT<br />
The server port number to which the request was sent.</p>
<p>SERVER_PORT_SECURE<br />
A string that contains either 0 or 1. If the request is being handled on the secure port, then this is 1. Otherwise, it is 0.</p>
<p>SERVER_PROTOCOL<br />
The name and revision of the request information protocol. The format is protocol/revision. (The canonicalized form of HTTP_VERSION.)</p>
<p>SERVER_SOFTWARE<br />
The name and version of the server software that answers the request and runs the gateway. The format is name/version.</p>
<p>SSI_EXEC_DISABLED</p>
<p>IIS 5.1 and earlier: This server variable is not available.<br />
Returns a 1 if the server-side include directive, #exec, is disabled. Otherwise, SSI_EXE_DISABLED returns a 0. To enable or disable #exec, use the SSIExecDisablemetabase property.</p>
<p>UNENCODED_URL</p>
<p>IIS 4.0 and earlier: This server variable is not available.<br />
Returns the raw, unencoded URL, for example, &#8220;/vdir/default.asp?querystring&#8221;.</p>
<p>UNICODE_</p>
<p>IIS 5.1 and earlier: This server variable is not available.<br />
In unicode ISAPI applications only, it is possible to retrieve server variable values as unicode values by prepending &#8220;UNICODE_&#8221; to the name of the server variable, unless the variable starts with &#8220;HTTP_&#8221; or &#8220;HEADER_&#8221;.</p>
<p>UNMAPPED_REMOTE_USER<br />
The name of the user as it is derived from the authorization header sent by the client, before the user name is mapped to a Windows account (same as REMOTE_USER). If you have an authentication filter installed on your Web server that maps incoming users to accounts, use LOGON_USER to view the mapped user name.</p>
<p>URL<br />
Gives the base portion of the URL, without any querystring or extra path information, for example, &#8220;/vdir/default.asp&#8221;.</p>
<p>For the raw URL, use HTTP_URL or UNENCODED_URL.</p>
<p>URL_PATH_INFO</p>
<p>Note: This server variable is only available on IIS 5.0.<br />
Use PATH_INFO instead.</p>
<p>____________________________________________<br />
BOOL (WINAPI * AddResponseHeaders) (<br />
struct _HTTP_FILTER_CONTEXT * pfc,<br />
LPSTR lpszHeaders,<br />
DWORD dwReserved<br />
);<br />
BOOL (WINAPI * WriteClient) (<br />
struct _HTTP_FILTER_CONTEXT * pfc,<br />
LPVOID Buffer,<br />
LPDWORD lpdwBytes,<br />
DWORD dwReserved<br />
);<br />
VOID * (WINAPI * AllocMem) (<br />
struct _HTTP_FILTER_CONTEXT * pfc,<br />
DWORD cbSize,<br />
DWORD dwReserved<br />
);<br />
BOOL (WINAPI * ServerSupportFunction) (<br />
struct _HTTP_FILTER_CONTEXT * pfc,<br />
enum SF_REQ_TYPE sfReq,<br />
PVOID pData,<br />
DWORD ul1,<br />
DWORD ul2<br />
);<br />
ServerSupportFunction 支持以下多种灵活的功能：<br />
SF_REQ_ADD_HEADERS_ON_DENIAL 这个功能允许过滤器在服务器产生拒绝访问的<br />
事件时增加特定的HTTP头，此函数一般用于认证过滤器<br />
SF_REQ_DISABLE_NOTIFICATIONS 禁止某个事件消息<br />
SF_REQ_GET_CONNID 这个功能在IIS4.0以后的版本已不再支持<br />
SF_REQ_GET_PROPERTY 取得IIS属性<br />
SF_REQ_NORMALIZE_URL 规整URL<br />
SF_REQ_SEND_RESPONSE_HEADER 发送回应HTTP头<br />
SF_REQ_SET_NEXT_READ_SIZE 设置下次数据读尺寸<br />
SF_REQ_SET_PROXY_INFO 设置代理信息<br />
} HTTP_FILTER_CONTEXT, *PHTTP_FILTER_CONTEXT;<br />
再看下上面几个函数的实例代码：<br />
pfc.AddResponseHeaders(pfc, PChar(&#8216;p3p: policyref=&#8221;&#8216; + P3pSetPolicyrefLink + &#8216;&#8221;,CP=&#8221;ALL&#8221;&#8216;#13#10), 0);//加头<br />
pfc.ServerSupportFunction(pfc, SF_REQ_SEND_RESPONSE_HEADER, PChar(&#8216;200 OK&#8217;), 0, 0);//返回状态<br />
pfc.WriteClient(pfc, PChar(Loc), sMsgLen, 0);//返回html<br />
Result := SF_STATUS_REQ_FINISHED; //处理结果</p>
<p>最后关注一下httpfilterproc 的返回值。<br />
Returns one of the following values that indicate how the application handled the event.<br />
SF_STATUS_REQ_FINISHED //被处理了，当前请求过程立即返回。<br />
The filter has handled the HTTP request. The server should disconnect the session.<br />
SF_STATUS_REQ_FINISHED_KEEP_CONN //同上，但继续保持连接keep-alive<br />
Treated the same as SF_STATUS_REQ_FINISHED. After this notification is received, the connection is closed.<br />
SF_STATUS_REQ_NEXT_NOTIFICATION // 继续下一个通知。<br />
The next filter in the notification chain should be called.<br />
SF_STATUS_REQ_HANDLED_NOTIFICATION //当前事件被处理，不需要通知下个过滤器进行相同事件处理。<br />
This filter handled the notification. No other handlers should be called for this particular notification type.<br />
SF_STATUS_REQ_ERROR //错误<br />
An error occurred. The server should call GetLastError and indicate the error to the client. The HTTP request will generally be aborted when this status is returned. The client should call SetLastError with the nature of the failure.<br />
SF_STATUS_REQ_READ_NEXT //<br />
The filter is an opaque stream filter (encrypted/compressed HTTP requests) and the session parameters are being negotiated. This is valid only for raw-read notification. This value indicates that the full request has not yet been received; the Web server should issue another read and notify the filter with the additional data read.<br />
Remarks</p>
<h4  class="related_post_title">热门文章</h4><ul class="related_post"><li>2010/04/10 -- <a href="http://abingle.com/my-products/2010-04-10/batch-register-email.html" title="购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。">购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。</a> (12)</li><li>2010/04/27 -- <a href="http://abingle.com/defaultcategory/2010-04-27/batch-domain-digger.html" title="强大实用批量域名查找工具下线,查找漏网之鱼">强大实用批量域名查找工具下线,查找漏网之鱼</a> (5)</li><li>2010/05/10 -- <a href="http://abingle.com/defaultcategory/2010-05-10/qq%e7%bd%91%e4%b8%8a%e4%b8%96%e5%8d%9a%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%88%b7q%e5%b8%81.html" title="QQ网上世博，可以刷Q币">QQ网上世博，可以刷Q币</a> (5)</li><li>2010/04/04 -- <a href="http://abingle.com/php-articals/2010-04-04/wordpress%e7%9a%84%e5%9b%ba%e5%ae%9a%e9%93%be%e6%8e%a5.html" title="WordPress的固定链接">WordPress的固定链接</a> (4)</li><li>2010/04/15 -- <a href="http://abingle.com/defaultcategory/2010-04-15/setup-ieproxy-commandly.html" title="批处理修改ie代理服务器设置之二">批处理修改ie代理服务器设置之二</a> (4)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://abingle.com/delphi-articals/2011-02-08/programming-of-isapi-filter.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>去除遨游浏览器的“使用遨游下载᾿</title>
		<link>http://abingle.com/defaultcategory/2011-01-28/%e5%8e%bb%e9%99%a4%e9%81%a8%e6%b8%b8%e6%b5%8f%e8%a7%88%e5%99%a8%e7%9a%84%e2%80%9c%e4%bd%bf%e7%94%a8%e9%81%a8%e6%b8%b8%e4%b8%8b%e8%bd%bd%e1%be%bf.html</link>
		<comments>http://abingle.com/defaultcategory/2011-01-28/%e5%8e%bb%e9%99%a4%e9%81%a8%e6%b8%b8%e6%b5%8f%e8%a7%88%e5%99%a8%e7%9a%84%e2%80%9c%e4%bd%bf%e7%94%a8%e9%81%a8%e6%b8%b8%e4%b8%8b%e8%bd%bd%e1%be%bf.html#comments</comments>
		<pubDate>Fri, 28 Jan 2011 05:24:26 +0000</pubDate>
		<dc:creator>呆呆</dc:creator>
				<category><![CDATA[defaultCategory]]></category>

		<guid isPermaLink="false">http://abingle.com/?p=181</guid>
		<description><![CDATA[去除遨游浏览器的&#8221;使用遨游下载&#8221; 用reshack打开maxthon.ex用reshack打开maxthon.exe ,找到所有包括DOWNLOADALL BY MX和Download by Maxthon的菜单项，删除之.
热门文章2010/04/10 -- 购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。 (12)2010/04/27 -- 强大实用批量域名查找工具下线,查找漏网之鱼 (5)2010/05/10 -- QQ网上世博，可以刷Q币 (5)2010/04/04 -- WordPress的固定链接 (4)2010/04/15 -- 批处理修改ie代理服务器设置之二 (4)]]></description>
			<content:encoded><![CDATA[<p>去除遨游浏览器的&#8221;使用遨游下载&#8221; <BR>用reshack打开maxthon.ex用reshack打开maxthon.exe ,找到所有包括DOWNLOADALL BY MX和Download by Maxthon的菜单项，删除之.</p>
<h4  class="related_post_title">热门文章</h4><ul class="related_post"><li>2010/04/10 -- <a href="http://abingle.com/my-products/2010-04-10/batch-register-email.html" title="购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。">购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。</a> (12)</li><li>2010/04/27 -- <a href="http://abingle.com/defaultcategory/2010-04-27/batch-domain-digger.html" title="强大实用批量域名查找工具下线,查找漏网之鱼">强大实用批量域名查找工具下线,查找漏网之鱼</a> (5)</li><li>2010/05/10 -- <a href="http://abingle.com/defaultcategory/2010-05-10/qq%e7%bd%91%e4%b8%8a%e4%b8%96%e5%8d%9a%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%88%b7q%e5%b8%81.html" title="QQ网上世博，可以刷Q币">QQ网上世博，可以刷Q币</a> (5)</li><li>2010/04/04 -- <a href="http://abingle.com/php-articals/2010-04-04/wordpress%e7%9a%84%e5%9b%ba%e5%ae%9a%e9%93%be%e6%8e%a5.html" title="WordPress的固定链接">WordPress的固定链接</a> (4)</li><li>2010/04/15 -- <a href="http://abingle.com/defaultcategory/2010-04-15/setup-ieproxy-commandly.html" title="批处理修改ie代理服务器设置之二">批处理修改ie代理服务器设置之二</a> (4)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://abingle.com/defaultcategory/2011-01-28/%e5%8e%bb%e9%99%a4%e9%81%a8%e6%b8%b8%e6%b5%8f%e8%a7%88%e5%99%a8%e7%9a%84%e2%80%9c%e4%bd%bf%e7%94%a8%e9%81%a8%e6%b8%b8%e4%b8%8b%e8%bd%bd%e1%be%bf.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gzip,deflate,zlib辨析</title>
		<link>http://abingle.com/delphi-articals/2011-01-18/gzipdeflatezlib%e8%be%a8%e6%9e%90.html</link>
		<comments>http://abingle.com/delphi-articals/2011-01-18/gzipdeflatezlib%e8%be%a8%e6%9e%90.html#comments</comments>
		<pubDate>Tue, 18 Jan 2011 14:57:23 +0000</pubDate>
		<dc:creator>呆呆</dc:creator>
				<category><![CDATA[delphi-articals]]></category>
		<category><![CDATA[deflate]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[zlib]]></category>

		<guid isPermaLink="false">http://abingle.com/?p=179</guid>
		<description><![CDATA[zlib,gzip,deflate辨析]]></description>
			<content:encoded><![CDATA[<p><span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/deflate" title="查看 deflate 的全部文章" target="_blank">deflate</a></span>(RFC1951):一种压缩算法，使用LZ77和哈弗曼进行编码；<br />
<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/zlib" title="查看 zlib 的全部文章" target="_blank">zlib</a></span>(RFC1950):一种格式，是对<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/deflate" title="查看 deflate 的全部文章" target="_blank">deflate</a></span>进行了简单的封装，他也是一个实现库(delphi中有<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/zlib" title="查看 zlib 的全部文章" target="_blank">zlib</a></span>,<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/zlib" title="查看 zlib 的全部文章" target="_blank">zlib</a></span>ex)<br />
<span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/gzip" title="查看 gzip 的全部文章" target="_blank">gzip</a></span>(RFC1952):一种格式，也是对deflate进行的封装。</p>
<p><span class='wp_keywordlink_affiliate'><a href="http://abingle.com/tag/gzip" title="查看 gzip 的全部文章" target="_blank">gzip</a></span> = gzip头 + deflate编码的实际内容 + gzip尾<br />
zlib = zlib头 + deflate编码的实际内容 + zlib尾</p>
<p>因最近在做一些关于网页解码方面的事情，压缩都是gzip,deflate.</p>
<p>deflate返回的就是zlib格式。浏览器可以解压，但ie系列要求必需是纯正的deflate格式，故解压时必须手动的添加一个头和尾，原来采集finance.sina.com.cn上的数据就是deflate格式，今天看了下，改用gzip压缩了。当时，只在deflate数据前加了两个字节：#$78#$9c，就可以用zlib解压了。</p>
<p>gzip格式和deflate相比，有了一些头信息：<br />
GZIP文件由1到多个“块”组成，实际上通常只有1块。每个块包含头、数据和尾三部分。块的概貌如下：</p>
<p>+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+========//========+===========//==========+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+<br />
|ID1|ID2| CM|FLG|     MTIME     |XFL| OS|   额外的头字段   |       压缩的数据      |     CRC32     |     ISIZE     |<br />
+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+========//========+===========//==========+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+&#8212;+<br />
1. 头部分<br />
ID1与ID2：各1字节。固定值，ID1 = 31 (0&#215;1F)，ID2 = 139(0&#215;8B)，指示GZIP格式。<br />
CM：1字节。压缩方法。目前只有一种：CM = 8，指示DEFLATE方法。<br />
FLG：1字节。标志。<br />
bit 0 FTEXT &#8211; 指示文本数据<br />
bit 1 FHCRC &#8211; 指示存在CRC16头校验字段<br />
bit 2 FEXTRA &#8211; 指示存在可选项字段<br />
bit 3 FNAME &#8211; 指示存在原文件名字段<br />
bit 4 FCOMMENT &#8211; 指示存在注释字段<br />
bit 5-7 保留</p>
<p>MTIME：4字节。更改时间。UINX格式。<br />
XFL：1字节。附加的标志。当CM = 8时，XFL = 2 &#8211; 最大压缩但最慢的算法；XFL = 4 &#8211; 最快但最小压缩的算法<br />
OS：1字节。操作系统，确切地说应该是文件系统。有下列定义：<br />
0 &#8211; FAT文件系统 (MS-DOS, OS/2, NT/Win32)<br />
1 &#8211; Amiga<br />
2 &#8211; VMS/OpenVMS<br />
3 &#8211; Unix<br />
4 &#8211; VM/CMS<br />
5 &#8211; Atari TOS<br />
6 &#8211; HPFS文件系统 (OS/2, NT)<br />
7 &#8211; Macintosh<br />
8 &#8211; Z-System<br />
9 &#8211; CP/M<br />
10 &#8211; TOPS-20<br />
11 &#8211; NTFS文件系统 (NT)<br />
12 &#8211; QDOS<br />
13 &#8211; Acorn RISCOS<br />
255 &#8211; 未知</p>
<p>额外的头字段：<br />
(若 FLG.FEXTRA = 1)</p>
<p>+&#8212;+&#8212;+&#8212;+&#8212;+===============//================+<br />
|SI1|SI2|  XLEN |      长度为XLEN字节的可选项     |<br />
+&#8212;+&#8212;+&#8212;+&#8212;+===============//================+<br />
(若 FLG.FNAME = 1)</p>
<p>+=======================//========================+<br />
|               原文件名(以NULL结尾)              |<br />
+=======================//========================+<br />
(若 FLG.FCOMMENT = 1)</p>
<p>+=======================//========================+<br />
|   注释文字(只能使用iso-8859-1字符，以NULL结尾)  |<br />
+=======================//========================+<br />
(若 FLG.FHCRC = 1)</p>
<p>+&#8212;+&#8212;+<br />
| CRC16 |<br />
+&#8212;+&#8212;+<br />
存在额外的可选项时，SI1与SI2指示可选项ID，XLEN指示可选项字节数。如 SI1 = 0&#215;41 (&#8216;A&#8217;)，SI2 = 0&#215;70 (&#8216;P&#8217;)，表示可选项是Apollo文件格式的额外数据。</p>
<p>2. 数据部分<br />
DEFLATE数据格式，包含一系列子数据块。子块概貌如下：</p>
<p>+&#8230;&#8230;+&#8230;&#8230;+&#8230;&#8230;+=============//============+<br />
|BFINAL|    BTYPE    |            数据           |<br />
+&#8230;&#8230;+&#8230;&#8230;+&#8230;&#8230;+=============//============+<br />
BFINAL：1比特。0 &#8211; 还有后续子块；1 &#8211; 该子块是最后一块。<br />
BTYPE：2比特。00 &#8211; 不压缩；01 &#8211; 静态Huffman编码压缩；10 &#8211; 动态Huffman编码压缩；11 &#8211; 保留。<br />
各种情形的处理过程，请参考后面列出的RFC文档。</p>
<p>3. 尾部分<br />
CRC32：4字节。原始(未压缩)数据的32位校验和。<br />
ISIZE：4字节。原始(未压缩)数据的长度的低32位。<br />
GZIP中字节排列顺序是LSB方式，即Little-Endian，与ZLIB中的相反。</p>
<p>deflate使用inflateInit()，而gzip使用inflateInit2()进行初始化，比 inflateInit()多一个参数: -MAX_WBITS，表示处理raw deflate数据。因为gzip数据中的zlib压缩数据块没有zlib header的两个字节。使用inflateInit2时要求zlib库忽略zlib header。在zlib手册中要求windowBits为8..15，但是实际上其它范围的数据有特殊作用，见zlib.h中的注释，如负数表示raw deflate。<br />
Apache的deflate变种可能也没有zlib header，需要添加假头后处理。即MS的错误deflate (raw deflate).zlib头第1字节一般是0×78, 第2字节与第一字节合起来的双字节应能被31整除，详见rfc1950。例如Firefox的zlib假头为0×7801，python zlib.compress()结果头部为0&#215;789c。 </p>
<p>注：以上文字属于多段摘抄，非原创。收录于此，感谢原作者们。</p>
<h4  class="related_post_title">热门文章</h4><ul class="related_post"><li>2010/04/10 -- <a href="http://abingle.com/my-products/2010-04-10/batch-register-email.html" title="购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。">购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。</a> (12)</li><li>2010/04/27 -- <a href="http://abingle.com/defaultcategory/2010-04-27/batch-domain-digger.html" title="强大实用批量域名查找工具下线,查找漏网之鱼">强大实用批量域名查找工具下线,查找漏网之鱼</a> (5)</li><li>2010/05/10 -- <a href="http://abingle.com/defaultcategory/2010-05-10/qq%e7%bd%91%e4%b8%8a%e4%b8%96%e5%8d%9a%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%88%b7q%e5%b8%81.html" title="QQ网上世博，可以刷Q币">QQ网上世博，可以刷Q币</a> (5)</li><li>2010/04/04 -- <a href="http://abingle.com/php-articals/2010-04-04/wordpress%e7%9a%84%e5%9b%ba%e5%ae%9a%e9%93%be%e6%8e%a5.html" title="WordPress的固定链接">WordPress的固定链接</a> (4)</li><li>2010/04/15 -- <a href="http://abingle.com/defaultcategory/2010-04-15/setup-ieproxy-commandly.html" title="批处理修改ie代理服务器设置之二">批处理修改ie代理服务器设置之二</a> (4)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://abingle.com/delphi-articals/2011-01-18/gzipdeflatezlib%e8%be%a8%e6%9e%90.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>今天帮孩子看一道题目，结果自己晕了，真老了。</title>
		<link>http://abingle.com/iis-asp-articals/2011-01-05/%e4%bb%8a%e5%a4%a9%e5%b8%ae%e5%ad%a9%e5%ad%90%e7%9c%8b%e4%b8%80%e9%81%93%e9%a2%98%e7%9b%ae%ef%bc%8c%e7%bb%93%e6%9e%9c%e8%87%aa%e5%b7%b1%e6%99%95%e4%ba%86%ef%bc%8c%e7%9c%9f%e8%80%81%e4%ba%86%e3%80%82.html</link>
		<comments>http://abingle.com/iis-asp-articals/2011-01-05/%e4%bb%8a%e5%a4%a9%e5%b8%ae%e5%ad%a9%e5%ad%90%e7%9c%8b%e4%b8%80%e9%81%93%e9%a2%98%e7%9b%ae%ef%bc%8c%e7%bb%93%e6%9e%9c%e8%87%aa%e5%b7%b1%e6%99%95%e4%ba%86%ef%bc%8c%e7%9c%9f%e8%80%81%e4%ba%86%e3%80%82.html#comments</comments>
		<pubDate>Wed, 05 Jan 2011 11:30:18 +0000</pubDate>
		<dc:creator>呆呆</dc:creator>
				<category><![CDATA[iis-asp-articals]]></category>

		<guid isPermaLink="false">http://abingle.com/iis-asp-articals/2011-01-05/%e4%bb%8a%e5%a4%a9%e5%b8%ae%e5%ad%a9%e5%ad%90%e7%9c%8b%e4%b8%80%e9%81%93%e9%a2%98%e7%9b%ae%ef%bc%8c%e7%bb%93%e6%9e%9c%e8%87%aa%e5%b7%b1%e6%99%95%e4%ba%86%ef%bc%8c%e7%9c%9f%e8%80%81%e4%ba%86%e3%80%82.html</guid>
		<description><![CDATA[360/50的结果是多少？
(A) 7&#8230;&#8230;1 &#160; &#160;(B) 70&#8230;&#8230;1 (C) 7&#8230;&#8230;10

我竟然选了A，晕了。
360/50=36/5=7&#8230;&#8230;1 ,选（A）

你会算错吗？

热门文章2010/04/10 -- 购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。 (12)2010/04/27 -- 强大实用批量域名查找工具下线,查找漏网之鱼 (5)2010/05/10 -- QQ网上世博，可以刷Q币 (5)2010/04/04 -- WordPress的固定链接 (4)2010/04/15 -- 批处理修改ie代理服务器设置之二 (4)]]></description>
			<content:encoded><![CDATA[<p>360/50的结果是多少？
<div>(A) 7&#8230;&#8230;1 &nbsp; &nbsp;(B) 70&#8230;&#8230;1 (C) 7&#8230;&#8230;10</div>
<div></div>
<div>我竟然选了A，晕了。</div>
<div>360/50=36/5=7&#8230;&#8230;1 ,选（A）</div>
<div></div>
<div>你会算错吗？</div>
<div></div>
<h4  class="related_post_title">热门文章</h4><ul class="related_post"><li>2010/04/10 -- <a href="http://abingle.com/my-products/2010-04-10/batch-register-email.html" title="购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。">购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。</a> (12)</li><li>2010/04/27 -- <a href="http://abingle.com/defaultcategory/2010-04-27/batch-domain-digger.html" title="强大实用批量域名查找工具下线,查找漏网之鱼">强大实用批量域名查找工具下线,查找漏网之鱼</a> (5)</li><li>2010/05/10 -- <a href="http://abingle.com/defaultcategory/2010-05-10/qq%e7%bd%91%e4%b8%8a%e4%b8%96%e5%8d%9a%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%88%b7q%e5%b8%81.html" title="QQ网上世博，可以刷Q币">QQ网上世博，可以刷Q币</a> (5)</li><li>2010/04/04 -- <a href="http://abingle.com/php-articals/2010-04-04/wordpress%e7%9a%84%e5%9b%ba%e5%ae%9a%e9%93%be%e6%8e%a5.html" title="WordPress的固定链接">WordPress的固定链接</a> (4)</li><li>2010/04/15 -- <a href="http://abingle.com/defaultcategory/2010-04-15/setup-ieproxy-commandly.html" title="批处理修改ie代理服务器设置之二">批处理修改ie代理服务器设置之二</a> (4)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://abingle.com/iis-asp-articals/2011-01-05/%e4%bb%8a%e5%a4%a9%e5%b8%ae%e5%ad%a9%e5%ad%90%e7%9c%8b%e4%b8%80%e9%81%93%e9%a2%98%e7%9b%ae%ef%bc%8c%e7%bb%93%e6%9e%9c%e8%87%aa%e5%b7%b1%e6%99%95%e4%ba%86%ef%bc%8c%e7%9c%9f%e8%80%81%e4%ba%86%e3%80%82.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2011卡塔尔亚洲杯赛程</title>
		<link>http://abingle.com/defaultcategory/2011-01-01/2011%e5%8d%a1%e5%a1%94%e5%b0%94%e4%ba%9a%e6%b4%b2%e6%9d%af%e8%b5%9b%e7%a8%8b.html</link>
		<comments>http://abingle.com/defaultcategory/2011-01-01/2011%e5%8d%a1%e5%a1%94%e5%b0%94%e4%ba%9a%e6%b4%b2%e6%9d%af%e8%b5%9b%e7%a8%8b.html#comments</comments>
		<pubDate>Sat, 01 Jan 2011 02:02:23 +0000</pubDate>
		<dc:creator>呆呆</dc:creator>
				<category><![CDATA[defaultCategory]]></category>

		<guid isPermaLink="false">http://abingle.com/defaultcategory/2011-01-01/2011%e5%8d%a1%e5%a1%94%e5%b0%94%e4%ba%9a%e6%b4%b2%e6%9d%af%e8%b5%9b%e7%a8%8b.html</guid>
		<description><![CDATA[2011卡塔尔亚洲杯赛程

A组赛程：

&#160;&#160;2011-1-7：卡塔尔 VS 乌兹别克

&#160;&#160;2011-1-8：科威特 VS 中国

&#160;&#160;2011-1-12：中国 VS 卡塔尔 乌兹别克 VS 科威特

&#160;&#160;2011-1-16：卡塔尔 VS 科威特 中国 VS 乌兹别克

&#160;&#160;B组赛程

&#160;&#160;1-9 日本 VS 约旦 沙特 VS 叙利亚

&#160;&#160;1-13 叙利亚 VS 日本 约旦 VS 沙特

&#160;&#160;1-17 约旦 VS 叙利亚 沙特 VS 日本

&#160;&#160;C组赛程

&#160;&#160;1-10 印度 VS 澳大利亚 韩国 VS 巴林

&#160;&#160;1-14 巴林 VS 印度 澳大利亚 VS 韩国

&#160;&#160;1-18 澳大利亚 VS 巴林 &#160;韩国 VS 印度

&#160;&#160;D组赛程

&#160;&#160;1-11 朝鲜 VS 阿联酋 伊拉克 [...]]]></description>
			<content:encoded><![CDATA[<div>2011卡塔尔亚洲杯赛程</div>
<div></div>
<div>A组赛程：</div>
<div></div>
<div>&nbsp;&nbsp;2011-1-7：卡塔尔 VS 乌兹别克</div>
<div></div>
<div>&nbsp;&nbsp;2011-1-8：科威特 VS 中国</div>
<div></div>
<div>&nbsp;&nbsp;2011-1-12：中国 VS 卡塔尔 乌兹别克 VS 科威特</div>
<div></div>
<div>&nbsp;&nbsp;2011-1-16：卡塔尔 VS 科威特 中国 VS 乌兹别克</div>
<div></div>
<div>&nbsp;&nbsp;B组赛程</div>
<div></div>
<div>&nbsp;&nbsp;1-9 日本 VS 约旦 沙特 VS 叙利亚</div>
<div></div>
<div>&nbsp;&nbsp;1-13 叙利亚 VS 日本 约旦 VS 沙特</div>
<div></div>
<div>&nbsp;&nbsp;1-17 约旦 VS 叙利亚 沙特 VS 日本</div>
<div></div>
<div>&nbsp;&nbsp;C组赛程</div>
<div></div>
<div>&nbsp;&nbsp;1-10 印度 VS 澳大利亚 韩国 VS 巴林</div>
<div></div>
<div>&nbsp;&nbsp;1-14 巴林 VS 印度 澳大利亚 VS 韩国</div>
<div></div>
<div>&nbsp;&nbsp;1-18 澳大利亚 VS 巴林 &nbsp;韩国 VS 印度</div>
<div></div>
<div>&nbsp;&nbsp;D组赛程</div>
<div></div>
<div>&nbsp;&nbsp;1-11 朝鲜 VS 阿联酋 伊拉克 VS 伊朗</div>
<div></div>
<div>&nbsp;&nbsp;1-15 伊朗 VS 朝鲜 &nbsp;阿联酋 VS 伊拉克</div>
<div></div>
<div>&nbsp;&nbsp;1-19 阿联酋 VS D4 伊拉克 VS 朝鲜</div>
<div></div>
<div>&nbsp;&nbsp;1/4决赛</div>
<div></div>
<div>&nbsp;&nbsp;1-21 QF1(A组第1vsB组第2) QF2(B组第1vsA组第2)</div>
<div></div>
<div>&nbsp;&nbsp;1-22 QF3(C组第1vsD组第2) QF4(D组第1vsC组第2)</div>
<div></div>
<div>&nbsp;&nbsp;半决赛</div>
<div></div>
<div>&nbsp;&nbsp;1-25 QF1胜者vsQF胜者 QF2胜者vsQF4胜者</div>
<div></div>
<div>&nbsp;&nbsp;决赛</div>
<div></div>
<div>&nbsp;&nbsp;1-28 三四名决赛</div>
<div></div>
<div>&nbsp;&nbsp;1-29 冠亚军决赛</div>
<h4  class="related_post_title">热门文章</h4><ul class="related_post"><li>2010/04/10 -- <a href="http://abingle.com/my-products/2010-04-10/batch-register-email.html" title="购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。">购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。</a> (12)</li><li>2010/04/27 -- <a href="http://abingle.com/defaultcategory/2010-04-27/batch-domain-digger.html" title="强大实用批量域名查找工具下线,查找漏网之鱼">强大实用批量域名查找工具下线,查找漏网之鱼</a> (5)</li><li>2010/05/10 -- <a href="http://abingle.com/defaultcategory/2010-05-10/qq%e7%bd%91%e4%b8%8a%e4%b8%96%e5%8d%9a%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%88%b7q%e5%b8%81.html" title="QQ网上世博，可以刷Q币">QQ网上世博，可以刷Q币</a> (5)</li><li>2010/04/04 -- <a href="http://abingle.com/php-articals/2010-04-04/wordpress%e7%9a%84%e5%9b%ba%e5%ae%9a%e9%93%be%e6%8e%a5.html" title="WordPress的固定链接">WordPress的固定链接</a> (4)</li><li>2010/04/15 -- <a href="http://abingle.com/defaultcategory/2010-04-15/setup-ieproxy-commandly.html" title="批处理修改ie代理服务器设置之二">批处理修改ie代理服务器设置之二</a> (4)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://abingle.com/defaultcategory/2011-01-01/2011%e5%8d%a1%e5%a1%94%e5%b0%94%e4%ba%9a%e6%b4%b2%e6%9d%af%e8%b5%9b%e7%a8%8b.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>移动网，铁通网，狗娘养。</title>
		<link>http://abingle.com/defaultcategory/2010-12-14/%e7%a7%bb%e5%8a%a8%e7%bd%91%ef%bc%8c%e9%93%81%e9%80%9a%e7%bd%91%ef%bc%8c%e7%8b%97%e5%a8%98%e5%85%bb%e3%80%82.html</link>
		<comments>http://abingle.com/defaultcategory/2010-12-14/%e7%a7%bb%e5%8a%a8%e7%bd%91%ef%bc%8c%e9%93%81%e9%80%9a%e7%bd%91%ef%bc%8c%e7%8b%97%e5%a8%98%e5%85%bb%e3%80%82.html#comments</comments>
		<pubDate>Tue, 14 Dec 2010 13:24:41 +0000</pubDate>
		<dc:creator>呆呆</dc:creator>
				<category><![CDATA[defaultCategory]]></category>

		<guid isPermaLink="false">http://abingle.com/defaultcategory/2010-12-14/%e7%a7%bb%e5%8a%a8%e7%bd%91%ef%bc%8c%e9%93%81%e9%80%9a%e7%bd%91%ef%bc%8c%e7%8b%97%e5%a8%98%e5%85%bb%e3%80%82.html</guid>
		<description><![CDATA[移动，还是做手机算了。
铁通，还是做你那个打不通固话得了。
这些网，你用了会很头痛。移动，铁通，没有自己的骨干网，用得心都会滴血。
全是通过自己的代理，或者网络转换到骨干网上。
铁通更牛，把上传速度限制了，下BT的人要急死。

明年用联（网）通的算了，10M光纤到户，600元包年，只时有时连接电信骨干有些问题。
真正好用的还是电信！


热门文章2010/04/10 -- 购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。 (12)2010/04/27 -- 强大实用批量域名查找工具下线,查找漏网之鱼 (5)2010/05/10 -- QQ网上世博，可以刷Q币 (5)2010/04/04 -- WordPress的固定链接 (4)2010/04/15 -- 批处理修改ie代理服务器设置之二 (4)]]></description>
			<content:encoded><![CDATA[<p>移动，还是做手机算了。
<div>铁通，还是做你那个打不通固话得了。</div>
<div>这些网，你用了会很头痛。移动，铁通，没有自己的骨干网，用得心都会滴血。</div>
<div>全是通过自己的代理，或者网络转换到骨干网上。</div>
<div>铁通更牛，把上传速度限制了，下BT的人要急死。</div>
<div></div>
<div>明年用联（网）通的算了，10M光纤到户，600元包年，只时有时连接电信骨干有些问题。</div>
<div>真正好用的还是电信！
<div></div>
</div>
<h4  class="related_post_title">热门文章</h4><ul class="related_post"><li>2010/04/10 -- <a href="http://abingle.com/my-products/2010-04-10/batch-register-email.html" title="购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。">购买邮箱？批量注册电子邮件？看看我的无限临时电子邮件。</a> (12)</li><li>2010/04/27 -- <a href="http://abingle.com/defaultcategory/2010-04-27/batch-domain-digger.html" title="强大实用批量域名查找工具下线,查找漏网之鱼">强大实用批量域名查找工具下线,查找漏网之鱼</a> (5)</li><li>2010/05/10 -- <a href="http://abingle.com/defaultcategory/2010-05-10/qq%e7%bd%91%e4%b8%8a%e4%b8%96%e5%8d%9a%ef%bc%8c%e5%8f%af%e4%bb%a5%e5%88%b7q%e5%b8%81.html" title="QQ网上世博，可以刷Q币">QQ网上世博，可以刷Q币</a> (5)</li><li>2010/04/04 -- <a href="http://abingle.com/php-articals/2010-04-04/wordpress%e7%9a%84%e5%9b%ba%e5%ae%9a%e9%93%be%e6%8e%a5.html" title="WordPress的固定链接">WordPress的固定链接</a> (4)</li><li>2010/04/15 -- <a href="http://abingle.com/defaultcategory/2010-04-15/setup-ieproxy-commandly.html" title="批处理修改ie代理服务器设置之二">批处理修改ie代理服务器设置之二</a> (4)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://abingle.com/defaultcategory/2010-12-14/%e7%a7%bb%e5%8a%a8%e7%bd%91%ef%bc%8c%e9%93%81%e9%80%9a%e7%bd%91%ef%bc%8c%e7%8b%97%e5%a8%98%e5%85%bb%e3%80%82.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

