﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-井中月</title><link>http://www.blogjava.net/daniel-tu/</link><description>知足常乐！</description><language>zh-cn</language><lastBuildDate>Mon, 06 Apr 2026 15:49:35 GMT</lastBuildDate><pubDate>Mon, 06 Apr 2026 15:49:35 GMT</pubDate><ttl>60</ttl><item><title>正则表达式语法表 </title><link>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248894.html</link><dc:creator>井中月</dc:creator><author>井中月</author><pubDate>Mon, 29 Dec 2008 06:22:00 GMT</pubDate><guid>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248894.html</guid><wfw:comment>http://www.blogjava.net/daniel-tu/comments/248894.html</wfw:comment><comments>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/daniel-tu/comments/commentRss/248894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/daniel-tu/services/trackbacks/248894.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 字符                                    描述                                                    "                                    将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如，&#82...&nbsp;&nbsp;<a href='http://www.blogjava.net/daniel-tu/archive/2008/12/29/248894.html'>阅读全文</a><img src ="http://www.blogjava.net/daniel-tu/aggbug/248894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/daniel-tu/" target="_blank">井中月</a> 2008-12-29 14:22 <a href="http://www.blogjava.net/daniel-tu/archive/2008/12/29/248894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>session功能实现原理 </title><link>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248892.html</link><dc:creator>井中月</dc:creator><author>井中月</author><pubDate>Mon, 29 Dec 2008 06:14:00 GMT</pubDate><guid>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248892.html</guid><wfw:comment>http://www.blogjava.net/daniel-tu/comments/248892.html</wfw:comment><comments>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248892.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/daniel-tu/comments/commentRss/248892.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/daniel-tu/services/trackbacks/248892.html</trackback:ping><description><![CDATA[<div class="postbody">
<p>HTTP协议（<a href="http://www.w3.org/Protocols/">http://www.w3.org/Protocols/</a>）是&#8220;一次性单向&#8221;协议。 <br />
服务端不能主动连接客户端，只能被动等待并答复客户端请求。客户端连接服务端，发出一个HTTP Request，服务端处理请求，并且返回一个HTTP Response给客户端，本次HTTP Request-Response Cycle结束。 <br />
我们看到，HTTP协议本身并不能支持服务端保存客户端的状态信息。于是，Web Server中引入了session的概念，用来保存客户端的状态信息。 <br />
这里用一个形象的比喻来解释session的工作方式。假设Web Server是一个商场的存包处，HTTP Request是一个顾客，第一次来到存包处，管理员把顾客的物品存放在某一个柜子里面（这个柜子就相当于Session），然后把一个号码牌交给这个顾客，作为取包凭证（这个号码牌就是Session ID）。顾客（HTTP Request）下一次来的时候，就要把号码牌（Session ID）交给存包处（Web Server）的管理员。管理员根据号码牌（Session ID）找到相应的柜子（Session），根据顾客（HTTP Request）的请求，Web Server可以取出、更换、添加柜子（Session）中的物品，Web Server也可以让顾客（HTTP Request）的号码牌和号码牌对应的柜子（Session）失效。顾客（HTTP Request）的忘性很大，管理员在顾客回去的时候（HTTP Response）都要重新提醒顾客记住自己的号码牌（Session ID）。这样，顾客（HTTP Request）下次来的时候，就又带着号码牌回来了。 <br />
我们可以看到，Session ID实际上是在客户端和服务端之间通过HTTP Request和HTTP Response传来传去的。
<p>我们看到，号码牌（Session ID）必须包含在HTTP Request里面。关于HTTP Request的具体格式，请参见HTTP协议（<a href="http://www.w3.org/Protocols/">http://www.w3.org/Protocols/</a>）。这里只做一个简单的介绍。 <br />
在Java Web Server（即Servlet/JSP Server）中，Session ID用jsessionid表示（请参见Servlet规范）。 <br />
HTTP Request一般由3部分组成： <br />
（1）Request Line <br />
这一行由HTTP Method（如GET或POST）、URL、和HTTP版本号组成。 <br />
例如，GET <a href="http://www.w3.org/pub/WWW/TheProject.html">http://www.w3.org/pub/WWW/TheProject.html</a> HTTP/1.1 <br />
GET <a href="http://www.google.com/search?q=Tomcat">http://www.google.com/search?q=Tomcat</a> HTTP/1.1 <br />
POST <a href="http://www.google.com/search">http://www.google.com/search</a> HTTP/1.1 <br />
GET <a href="http://www.somsite.com/menu.do;jsessionid=1001">http://www.somsite.com/menu.do;jsessionid=1001</a> HTTP/1.1
<p>（2）Request Headers <br />
这部分定义了一些重要的头部信息，如，浏览器的种类，语言，类型。Request Headers中还可以包括Cookie的定义。例如： <br />
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) <br />
Accept-Language: en-us <br />
Cookie: jsessionid=1001
<p>（3）Message Body <br />
如果HTTP Method是GET，那么Message Body为空。 <br />
如果HTTP Method是POST，说明这个HTTP Request是submit一个HTML Form的结果， <br />
那么Message Body为HTML Form里面定义的Input属性。例如， <br />
user=guest <br />
password=guest <br />
jsessionid=1001 <br />
主意，如果把HTML Form元素的Method属性改为GET。那么，Message Body为空，所有的Input属性都会加在URL的后面。你在浏览器的URL地址栏中会看到这些属性，类似于 <br />
<a href="http://www.somesite/login.do?user=guest&amp;password=guest&amp;jsessionid=1001">http://www.somesite/login.do?user=guest&amp;password=guest&amp;jsessionid=1001</a>
<p>从理论上来说，这3个部分（Request URL，Cookie Header, Message Body）都可以用来存放Session ID。由于Message Body方法必须需要一个包含Session ID的HTML Form，所以这种方法不通用。 <br />
一般用来实现Session的方法有两种： <br />
（1）URL重写。 <br />
Web Server在返回Response的时候，检查页面中所有的URL，包括所有的连接，和HTML Form的Action属性，在这些URL后面加上&#8220;;jsessionid=XXX&#8221;。 <br />
下一次，用户访问这个页面中的URL。jsessionid就会传回到Web Server。 <br />
（2）Cookie。 <br />
如果客户端支持Cookie，Web Server在返回Response的时候，在Response的Header部分，加入一个&#8220;set-cookie: jsessionid=XXXX&#8221;header属性，把jsessionid放在Cookie里传到客户端。 <br />
客户端会把Cookie存放在本地文件里，下一次访问Web Server的时候，再把Cookie的信息放到HTTP Request的&#8220;Cookie&#8221;header属性里面，这样jsessionid就随着HTTP Request返回给Web Server。
<p>我们来看Tomcat5的源代码如何支持jsessionid。 <br />
org.apache.coyote.tomcat5.CoyoteResponse类的toEncoded()方法支持URL重写。 <br />
String toEncoded(String url, String sessionId) { <br />
&#8230; <br />
StringBuffer sb = new StringBuffer(path); <br />
if( sb.length() &gt; 0 ) { // jsessionid can't be first. <br />
sb.append(";jsessionid="); <br />
sb.append(sessionId); <br />
} <br />
sb.append(anchor); <br />
sb.append(query); <br />
return (sb.toString()); <br />
}
<p>我们来看org.apache.coyote.tomcat5.CoyoteRequest的两个方法configureSessionCookie() <br />
doGetSession()用Cookie支持jsessionid.
<p>/** <br />
* Configures the given JSESSIONID cookie. <br />
* <br />
* @param cookie The JSESSIONID cookie to be configured <br />
*/ <br />
protected void configureSessionCookie(Cookie cookie) { <br />
&#8230; <br />
}
<p>HttpSession doGetSession(boolean create){ <br />
&#8230; <br />
// Creating a new session cookie based on that session <br />
if ((session != null) &amp;&amp; (getContext() != null) <br />
&amp;&amp; getContext().getCookies()) { <br />
Cookie cookie = new Cookie(Globals.SESSION_COOKIE_NAME, <br />
session.getId()); <br />
configureSessionCookie(cookie); <br />
((HttpServletResponse) response).addCookie(cookie); <br />
} <br />
&#8230; <br />
}
<p>Session的典型应用是存放用户的Login信息，如用户名，密码，权限角色等信息，应用程序（如Email服务、网上银行等系统）根据这些信息进行身份验证和权限验证</p>
</div>
<img src ="http://www.blogjava.net/daniel-tu/aggbug/248892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/daniel-tu/" target="_blank">井中月</a> 2008-12-29 14:14 <a href="http://www.blogjava.net/daniel-tu/archive/2008/12/29/248892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP POST和GET的区别 </title><link>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248891.html</link><dc:creator>井中月</dc:creator><author>井中月</author><pubDate>Mon, 29 Dec 2008 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248891.html</guid><wfw:comment>http://www.blogjava.net/daniel-tu/comments/248891.html</wfw:comment><comments>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248891.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/daniel-tu/comments/commentRss/248891.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/daniel-tu/services/trackbacks/248891.html</trackback:ping><description><![CDATA[<p>1、HTTP 只有POST和GET 两种命令模式；
<p>2、POST是被设计用来向上放东西的，而GET是被设计用来从服务器取东西的，GET也能够向服务器传送较少的数据，而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.POST的信息作为HTTP 请求的内容，而GET是在HTTP 头部传输的；
<p>3、POST与GET在HTTP 中传送的方式不同，GET的参数是在HTTP 的头部传送的，而Post的数据则是在HTTP 请求的内容里传送;
<p>4、POST传输数据时，不需要在URL中显示出来，而GET方法要在URL中显示；
<p>5、GET方法由于受到URL长度的限制,只能传递大约1024字节；POST传输的数据量大，可以达到2M，而根据微软方面的说法，微软对用 Request.Form() 可接收的最大数据有限制，IIS 4 中为 80 KB 字节，IIS 5 中为 100 KB 字节；
<p>6、SOAP是依赖于HTTP POST模式实现的；
<p>&nbsp;
<p>例子：
<p><strong>HTTP GET</strong></p>
<p>发送 </p>
<p>GET /DEMOWebServices2.8/Service.asmx/CancelOrder?UserID=string&amp;PWD=string&amp;OrderConfirmation=string HTTP/1.1<br />
Host: api.efxnow.com</p>
<p>回复</p>
<p>HTTP/1.1 200 OK<br />
Content-Type: text/xml; charset=utf-8<br />
Content-Length: length </p>
<p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;objPlaceOrderResponse xmlns="<a href='https://api.efxnow.com/webservices2.3"' href_cetemp='https://api.efxnow.com/webservices2.3"'>https://api.efxnow.com/webservices2.3"</a>&gt;<br />
&nbsp; &lt;Success&gt;boolean&lt;/Success&gt;<br />
&nbsp; &lt;ErrorDescription&gt;string&lt;/ErrorDescription&gt;<br />
&nbsp; &lt;ErrorNumber&gt;int&lt;/ErrorNumber&gt;<br />
&nbsp; &lt;CustomerOrderReference&gt;long&lt;/CustomerOrderReference&gt;<br />
&nbsp; &lt;OrderConfirmation&gt;string&lt;/OrderConfirmation&gt;<br />
&nbsp; &lt;CustomerDealRef&gt;string&lt;/CustomerDealRef&gt;<br />
&lt;/objPlaceOrderResponse&gt;</p>
<p>&nbsp;</p>
<p><strong>HTTP POST</strong></p>
<p>发送 </p>
<p>POST /DEMOWebServices2.8/Service.asmx/CancelOrder HTTP/1.1<br />
Host: api.efxnow.com<br />
Content-Type: application/x-www-form-urlencoded<br />
Content-Length: length
<p>UserID=string&amp;PWD=string&amp;OrderConfirmation=string</p>
<p>回复</p>
<p>HTTP/1.1 200 OK<br />
Content-Type: text/xml; charset=utf-8<br />
Content-Length: length </p>
<p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;objPlaceOrderResponse xmlns="<a href='https://api.efxnow.com/webservices2.3"' href_cetemp='https://api.efxnow.com/webservices2.3"'>https://api.efxnow.com/webservices2.3"</a>&gt;<br />
&nbsp; &lt;Success&gt;boolean&lt;/Success&gt;<br />
&nbsp; &lt;ErrorDescription&gt;string&lt;/ErrorDescription&gt;<br />
&nbsp; &lt;ErrorNumber&gt;int&lt;/ErrorNumber&gt;<br />
&nbsp; &lt;CustomerOrderReference&gt;long&lt;/CustomerOrderReference&gt;<br />
&nbsp; &lt;OrderConfirmation&gt;string&lt;/OrderConfirmation&gt;<br />
&nbsp; &lt;CustomerDealRef&gt;string&lt;/CustomerDealRef&gt;<br />
&lt;/objPlaceOrderResponse&gt;</p>
<p>&nbsp;</p>
<p><strong>SOAP 1.2</strong></p>
<p>发送 </p>
<p>POST /DEMOWebServices2.8/Service.asmx HTTP/1.1<br />
Host: api.efxnow.com<br />
Content-Type: application/soap+xml; charset=utf-8<br />
Content-Length: length
<p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;soap12:Envelope xmlns:xsi="<a href='http://www.w3.org/2001/XMLSchema-instance"' href_cetemp='http://www.w3.org/2001/XMLSchema-instance"'>http://www.w3.org/2001/XMLSchema-instance"</a> xmlns:xsd="<a href='http://www.w3.org/2001/XMLSchema"' href_cetemp='http://www.w3.org/2001/XMLSchema"'>http://www.w3.org/2001/XMLSchema"</a> xmlns:soap12="<a href='http://www.w3.org/2003/05/soap-envelope"' href_cetemp='http://www.w3.org/2003/05/soap-envelope"'>http://www.w3.org/2003/05/soap-envelope"</a>&gt;<br />
&nbsp; &lt;soap12:Body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;CancelOrder xmlns="<a href='https://api.efxnow.com/webservices2.3"' href_cetemp='https://api.efxnow.com/webservices2.3"'>https://api.efxnow.com/webservices2.3"</a>&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;UserID&gt;string&lt;/UserID&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;PWD&gt;string&lt;/PWD&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;OrderConfirmation&gt;string&lt;/OrderConfirmation&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/CancelOrder&gt;<br />
&nbsp; &lt;/soap12:Body&gt;<br />
&lt;/soap12:Envelope&gt;</p>
<p>回复</p>
<p>HTTP/1.1 200 OK<br />
Content-Type: application/soap+xml; charset=utf-8<br />
Content-Length: length </p>
<p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;soap12:Envelope xmlns:xsi="<a href='http://www.w3.org/2001/XMLSchema-instance"' href_cetemp='http://www.w3.org/2001/XMLSchema-instance"'>http://www.w3.org/2001/XMLSchema-instance"</a> xmlns:xsd="<a href='http://www.w3.org/2001/XMLSchema"' href_cetemp='http://www.w3.org/2001/XMLSchema"'>http://www.w3.org/2001/XMLSchema"</a> xmlns:soap12="<a href='http://www.w3.org/2003/05/soap-envelope"' href_cetemp='http://www.w3.org/2003/05/soap-envelope"'>http://www.w3.org/2003/05/soap-envelope"</a>&gt;<br />
&nbsp; &lt;soap12:Body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;CancelOrderResponse xmlns="<a href='https://api.efxnow.com/webservices2.3"' href_cetemp='https://api.efxnow.com/webservices2.3"'>https://api.efxnow.com/webservices2.3"</a>&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;CancelOrderResult&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Success&gt;boolean&lt;/Success&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ErrorDescription&gt;string&lt;/ErrorDescription&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ErrorNumber&gt;int&lt;/ErrorNumber&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;CustomerOrderReference&gt;long&lt;/CustomerOrderReference&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;OrderConfirmation&gt;string&lt;/OrderConfirmation&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;CustomerDealRef&gt;string&lt;/CustomerDealRef&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/CancelOrderResult&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/CancelOrderResponse&gt;<br />
&nbsp; &lt;/soap12:Body&gt;<br />
&lt;/soap12:Envelope&gt; </p>
<img src ="http://www.blogjava.net/daniel-tu/aggbug/248891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/daniel-tu/" target="_blank">井中月</a> 2008-12-29 14:13 <a href="http://www.blogjava.net/daniel-tu/archive/2008/12/29/248891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP客户请求的数据格式说明 </title><link>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248890.html</link><dc:creator>井中月</dc:creator><author>井中月</author><pubDate>Mon, 29 Dec 2008 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248890.html</guid><wfw:comment>http://www.blogjava.net/daniel-tu/comments/248890.html</wfw:comment><comments>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/daniel-tu/comments/commentRss/248890.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/daniel-tu/services/trackbacks/248890.html</trackback:ping><description><![CDATA[<div class="postbody">
<p>HTTP请求包括三部分：请求行(Request Line)，头部（Headers）和数据体（Body)。其中，请求行由请求方法(method)，请求网址Request-URI和协议 (Protocol)构成，而请求头包括多个属性，数据体则可以被认为是附加在请求之后的文本或二进制文件。</p>
<p>下面这个例子显示了一个HTTP请求的Header内容，这些数据是真正以网络HTTP协议从IE浏览器传递到Apache服务器上的。</p>
<p>GET /icwork/? search=product HTTP/1.1</p>
<p>Accept:image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/vnd.ms-powerpoint,application/vnd.ms-excel,application/msword,*.*</p>
<p>Accept-Language:en-us</p>
<p>Accept-Encoding:gzip,deflate</p>
<p>User-Agent:Mozilla/4.0(compatible;MSIE 5.01;Windows NT 5.0;DigExt)</p>
<p>Host:www.icconcept.com:8080</p>
<p>Referer:http://www.yoursite.com/header.html</p>
<p>Connection:Keep-Alive</p>
<p>这段程序使用了6个Header，还有一些Header没有出现。我们参考这个例子具体解释HTTP请求格式。</p>
<p>1.HTTP请求行：请求行格式为Method Request-URI Protocol。在上面这个例子里，&#8220;GET /icwork/? search=pruduct HTTP/1.1&#8221;是请求行。</p>
<p>2.Accept:指浏览器或其他客户可以接爱的MIME文件格式。Servlet可以根据它判断并返回适当的文件格式。</p>
<p>3.Accept-Charset：指出浏览器可以接受的字符编码。英文浏览器的默认值是ISO-8859-1.</p>
<p>4.Accept-Language：指出浏览器可以接受的语言种类，如en或en-us，指英语。</p>
<p>5.Accept-Encoding：指出浏览器可以接受的编码方式。编码方式不同于文件格式，它是为了压缩文件并加速文件传递速度。浏览器在接收到Web响应之后先解码，然后再检查文件格式。</p>
<p>6.Authorization：当使用密码机制时用来标识浏览器。</p>
<p>7.Cache-Control：设置关于请求被代理服务器存储的相关选项。一般servlet用不到。</p>
<p>8.Connection：用来告诉服务器是否可以维持固定的HTTP连接。HTTP/1.1使用Keep-Alive为默认值，这样，当浏览器需要多个文件时(比如一个HTML文件和相关的图形文件)，不需要每次都建立连接。</p>
<p>9.Content-Type：用来表名request的内容类型。可以用HttpServletRequest的getContentType()方法取得。</p>
<p>10.Cookie：浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体，它可以记载和服务器相关的用户信息，也可以用来实现会话功能。</p>
<p>11.Expect：表时客户预期的响应状态。</p>
<p>12.From：给出客户端HTTP请求负责人的email地址。</p>
<p>13.Host：对应网址URL中的Web名称和端口号。</p>
<p>14.If-Match：供PUT方法使用。</p>
<p>15.If-Modified-Since：客户使用这个属性表明它只需要在指定日期之后更改过的网页。因为浏览器可以使用其存储的文件而不必从服务器请求，这样节省了Web资源。由于Servlet是动态生成的网页，一般不需要使用这个属性。</p>
<p>16.If-None-Match：和If-Match相反的操作，供PUT方法使用。</p>
<p>17.If-Unmodified-Since：和If-Match-Since相反。</p>
<p>18.Pragma：这个属性只有一种值，即Pragma：no-cache,表明如果servlet充当代理服务器，即使其有已经存储的网页，也要将请求传递给目的服务器。</p>
<p>19.Proxy-Authorization：代理服务器使用这个属性，Servlet一般用不到。</p>
<p>20.Range：如果客户有部分网页，这个属性可以请求剩余部分。</p>
<p>21.Referer：表明产生请求的网页URL。如比从网页/icconcept/index.jsp中点击一个链接到网页/icwork/search，在向服务器发送的GET/icwork/search中的请求中，Referer是<a href="http://hostname:8080/icconcept/index.php">http://hostname:8080/icconcept/index.php</a>。这个属性可以用来跟踪Web请求是从什么网站来的。</p>
<p>22.Upgrage：客户通过这个属性设定可以使用与HTTP/1.1不同的协议。</p>
<p>23.User-Agent：是客户浏览器名称。</p>
<p>24.Via：用来记录Web请求经过的代理服务器或Web通道。</p>
<p>25.Warning：用来由客户声明传递或存储(cache)错误。</p>
</div>
<img src ="http://www.blogjava.net/daniel-tu/aggbug/248890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/daniel-tu/" target="_blank">井中月</a> 2008-12-29 14:13 <a href="http://www.blogjava.net/daniel-tu/archive/2008/12/29/248890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP深入浅出 </title><link>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248888.html</link><dc:creator>井中月</dc:creator><author>井中月</author><pubDate>Mon, 29 Dec 2008 06:12:00 GMT</pubDate><guid>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248888.html</guid><wfw:comment>http://www.blogjava.net/daniel-tu/comments/248888.html</wfw:comment><comments>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248888.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/daniel-tu/comments/commentRss/248888.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/daniel-tu/services/trackbacks/248888.html</trackback:ping><description><![CDATA[<div class="postbody">
<p>HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP，使HTTP客户（如Web浏览器）能够从HTTP服务器(Web服务器)请求信息和服务，HTTP目前协议的版本是1.1.HTTP是一种无状态的协议，无状态是指Web浏览器和Web服务器之间不需要建立持久的连接，这意味着当一个客户端向服务器端发出请求，然后Web服务器返回响应(response)，连接就被关闭了，在服务器端不保留连接的有关信息.HTTP遵循请求(Request)/应答(Response)模型。Web浏览器向Web服务器发送请求，Web服务器处理请求并返回适当的应答。所有HTTP连接都被构造成一套请求和应答。
<p>HTTP使用内容类型，是指Web服务器向Web浏览器返回的文件都有与之相关的类型。所有这些类型在MIME　Internet邮件协议上模型化，即Web服务器告诉Web浏览器该文件所具有的种类，是HTML文档、GIF格式图像、声音文件还是独立的应用程序。大多数Web浏览器都拥有一系列的可配置的辅助应用程序，它们告诉浏览器应该如何处理Web服务器发送过来的各种内容类型。
<p>HTTP通信机制是在一次完整的HTTP通信过程中，Web浏览器与Web服务器之间将完成下列7个步骤：
<p>（1）&nbsp;&nbsp;&nbsp; 建立TCP连接
<p>在HTTP工作开始之前，Web浏览器首先要通过网络与Web服务器建立连接，该连接是通过TCP来完成的，该协议与IP协议共同构建Internet，即著名的TCP/IP协议族，因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议，根据规则，只有低层协议建立之后才能，才能进行更层协议的连接，因此，首先要建立TCP连接，一般TCP连接的端口号是80
<p>（2）&nbsp;&nbsp;&nbsp; Web浏览器向Web服务器发送请求命令
<p>一旦建立了TCP连接，Web浏览器就会向Web服务器发送请求命令
<p>例如：GET/sample/hello.jsp HTTP/1.1
<p>（3）&nbsp;&nbsp;&nbsp; Web浏览器发送请求头信息
<p>浏览器发送其请求命令之后，还要以头信息的形式向Web服务器发送一些别的信息，之后浏览器发送了一空白行来通知服务器，它已经结束了该头信息的发送。
<p>（4）&nbsp;&nbsp;&nbsp; Web服务器应答
<p>客户机向服务器发出请求后，服务器会客户机回送应答，
<p>HTTP/1.1 200 OK
<p>应答的第一部分是协议的版本号和应答状态码
<p>（5）&nbsp;&nbsp;&nbsp; Web服务器发送应答头信息
<p>正如客户端会随同请求发送关于自身的信息一样，服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。
<p>（6）&nbsp;&nbsp;&nbsp; Web服务器向浏览器发送数据
<p>Web服务器向浏览器发送头信息后，它会发送一个空白行来表示头信息的发送到此为结束，接着，它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据
<p>（7）&nbsp;&nbsp;&nbsp; Web服务器关闭TCP连接
<p>一般情况下，一旦Web服务器向浏览器发送了请求数据，它就要关闭TCP连接，然后如果浏览器或者服务器在其头信息加入了这行代码
<p>Connection:keep-alive
<p>TCP连接在发送后将仍然保持打开状态，于是，浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间，还节约了网络带宽。
<p>HTTP请求格式
<p>当浏览器向Web服务器发出请求时，它向服务器传递了一个数据块，也就是请求信息，HTTP请求信息由3部分组成：
<p>l&nbsp;&nbsp; 请求方法URI协议/版本
<p>l&nbsp;&nbsp; 请求头(Request Header)
<p>l&nbsp;&nbsp; 请求正文
<p>下面是一个HTTP请求的例子：
<p>GET/sample.jspHTTP/1.1
<p>Accept:image/gif.image/jpeg,*/*
<p>Accept-Language:zh-cn
<p>Connection:Keep-Alive
<p>Host:localhost
<p>User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
<p>Accept-Encoding:gzip,deflate
<p>username=jinqiao&amp;password=1234
<p>（1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 请求方法URI协议/版本
<p>请求的第一行是&#8220;方法URL议/版本&#8221;：GET/sample.jsp HTTP/1.1
<p>以上代码中&#8220;GET&#8221;代表请求方法，&#8220;/sample.jsp&#8221;表示URI，&#8220;HTTP/1.1代表协议和协议的版本。
<p>根据HTTP标准，HTTP请求可以使用多种请求方法。例如：HTTP1.1支持7种请求方法：GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中，最常用的方法是GET和POST。
<p>URL完整地指定了要访问的网络资源，通常只要给出相对于服务器的根目录的相对目录即可，因此总是以&#8220;/&#8221;开头，最后，协议版本声明了通信过程中使用HTTP的版本。
<p>（2）　请求头(Request Header)
<p>请求头包含许多有关的客户端环境和请求正文的有用信息。例如，请求头可以声明浏览器所用的语言，请求正文的长度等。
<p>Accept:image/gif.image/jpeg.*/*
<p>Accept-Language:zh-cn
<p>Connection:Keep-Alive
<p>Host:localhost
<p>User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
<p>Accept-Encoding:gzip,deflate.
<p>（3）　请求正文
<p>请求头和请求正文之间是一个空行，这个行非常重要，它表示请求头已经结束，接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息：
<p>username=jinqiao&amp;password=1234
<p>在以上的例子的HTTP请求中，请求的正文只有一行内容。当然，在实际应用中，HTTP请求正文可以包含更多的内容。
<p>HTTP请求方法我这里只讨论GET方法与POST方法
<p>GET方法
<p>GET方法是默认的HTTP请求方法，我们日常用GET方法来提交表单数据，然而用GET方法提交的表单数据只经过了简单的编码，同时它将作为URL的一部分向Web服务器发送，因此，如果使用GET方法来提交表单数据就存在着安全隐患上。例如
<p><a href="http://127.0.0.1/login.jsp?Name=zhangshi&amp;Age=30&amp;Submit=%cc%E+%BD%BB">Http://127.0.0.1/login.jsp?Name=zhangshi&amp;Age=30&amp;Submit=%cc%E+%BD%BB</a>
<p>从上面的URL请求中，很容易就可以辩认出表单提交的内容。（？之后的内容）另外由于GET方法提交的数据是作为URL请求的一部分所以提交的数据量不能太大
<p>POST方法
<p>POST方法是GET方法的一个替代方法，它主要是向Web服务器提交表单数据，尤其是大批量的数据。POST方法克服了GET方法的一些缺点。通过POST方法提交表单数据时，数据不是作为URL请求的一部分而是作为标准数据传送给Web服务器，这就克服了GET方法中的信息无法保密和数据量太小的缺点。因此，出于安全的考虑以及对用户隐私的尊重，通常表单提交时采用POST方法。
<p>从编程的角度来讲，如果用户通过GET方法提交数据，则数据存放在QUERY＿STRING环境变量中，而POST方法提交的数据则可以从标准输入流中获取。
<p>HTTP应答与HTTP请求相似，HTTP响应也由3个部分构成，分别是：
<p>l 　协议状态版本代码描述
<p>l 　响应头(Response Header)
<p>l 　响应正文
<p>&nbsp;
<p>下面是一个HTTP响应的例子：
<p>HTTP/1.1 200 OK
<p>Server:Apache Tomcat/5.0.12
<p>Date:Mon,6Oct2003 13:23:42 GMT
<p>Content-Length:112
<p>&lt;html&gt;<br />
&lt;head&gt;
<p>&lt;title&gt;HTTP响应示例&lt;title&gt;
<p>&lt;/head&gt;
<p>&lt;body&gt;
<p>Hello HTTP!
<p>&lt;/body&gt;
<p>&lt;/html&gt;</p>
<p><br />
协议状态代码描述HTTP响应的第一行类似于HTTP请求的第一行，它表示通信所用的协议是HTTP1.1服务器已经成功的处理了客户端发出的请求（200表示成功）: </p>
<p>HTTP/1.1 200 OK<br />
响应头(Response Header)响应头也和请求头一样包含许多有用的信息，例如服务器类型、日期时间、内容类型和长度等：
<p>Server:Apache Tomcat/5.0.12
<p>Date:Mon,6Oct2003 13:13:33 GMT
<p>Content-Type:text/html
<p>Last-Moified:Mon,6 Oct 2003 13:23:42 GMT
<p>Content-Length:112
<p>响应正文响应正文就是服务器返回的HTML页面：
<p>&lt;html&gt;<br />
&lt;head&gt;
<p>&lt;title&gt;HTTP响应示例&lt;title&gt;
<p>&lt;/head&gt;
<p>&lt;body&gt;
<p>Hello HTTP!
<p>&lt;/body&gt;
<p>&lt;/html&gt;
<p>响应头和正文之间也必须用空行分隔。　　
<p>HTTP应答码
<p>HTTP应答码也称为状态码，它反映了Web服务器处理HTTP请求状态。HTTP应答码由3位数字构成，其中首位数字定义了应答码的类型：
<p>1XX－信息类(Information),表示收到Web浏览器请求，正在进一步的处理中
<p>2XX－成功类（Successful）,表示用户请求被正确接收，理解和处理例如：200 OK
<p>3XX-重定向类(Redirection),表示请求没有成功，客户必须采取进一步的动作。
<p>4XX-客户端错误(Client Error)，表示客户端提交的请求有错误 例如：404 NOT&nbsp; Found，意味着请求中所引用的文档不存在。
<p>5XX-服务器错误(Server Error)表示服务器不能完成对请求的处理：如 500
<p>对于我们Web开发人员来说掌握HTTP应答码有助于提高Web应用程序调试的效率和准确性。
<p>安全连接
<p>Web应用最常见的用途之一是电子商务，可以利用Web服务器端程序使人们能够网络购物，需要指出一点是，缺省情况下，通过Internet发送信息是不安全的，如果某人碰巧截获了你发给朋友的一则消息，他就能打开它，假想在里面有你的信用卡号码，这会有多么糟糕，幸运的是，很多Web服务器以及Web浏览器都有创立安全连接的能力，这样它们就可以安全的通信了。
<p>通过Internet提供安全连接最常见的标准是安全套接层(Secure Sockets layer,SSl)协议。SSL协议是一个应用层协议(和HTTP一样)，用于安全方式在Web上交换数据，SSL使用公开密钥编码系统。从本质讲，这意味着业务中每一方都拥有一个公开的和一个私有的密钥。当一方使用另一方公开密钥进行编码时，只有拥有匹配密钥的人才能对其解码。简单来讲，公开密钥编码提供了一种用于在两方之间交换数据的安全方法，SSL连接建立之后，客户和服务器都交换公开密钥，并在进行业务联系之前进行验证，一旦双方的密钥都通过验证，就可以安全地交换数据。 </p>
</div>
<img src ="http://www.blogjava.net/daniel-tu/aggbug/248888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/daniel-tu/" target="_blank">井中月</a> 2008-12-29 14:12 <a href="http://www.blogjava.net/daniel-tu/archive/2008/12/29/248888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP/1.1协议规范(中文归纳版）</title><link>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248887.html</link><dc:creator>井中月</dc:creator><author>井中月</author><pubDate>Mon, 29 Dec 2008 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248887.html</guid><wfw:comment>http://www.blogjava.net/daniel-tu/comments/248887.html</wfw:comment><comments>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248887.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/daniel-tu/comments/commentRss/248887.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/daniel-tu/services/trackbacks/248887.html</trackback:ping><description><![CDATA[<div class="postbody">
<p>一、介绍（introduction）
<p>1. 目的——HTTP/0.9-〉HTTP/1.0-〉HTTP/1.1
<p>2. 要求——MUST、REQUIRED、SHOULD
<p>3. 术语——连接(Connection)、消息(Message)、请求(Request)、应答(Response)、资源(Resource)、实体(Entity)、表示方法(Representation)、内容协商(Content Negotiation)、变量（Variant)、客户机（Client）、用户代理(User agent)、服务器(Server)、原服务器（Origin server)、代理服务器（ Proxy）、网关（gateway）、高速缓存（Cache）、可缓存（Cacheable）、直接（first-hand）、明确终止时间（explicit expiration time）、探索终止时间（heuristic expiration time）、年龄（Age）、保鲜寿命（Freshness lifetime）、保鲜（Fresh）、陈旧（Stale）、语义透明（semantically transparent）、有效性判别器（Validator）、实体标记（entity tag）或最终更改时间（Last-Modified time))、上游/下游（upstream/downstream）、向内/向外（inbound/outbound）
<p>4. 总体操作——请求/应答、中介
<p>二、符号惯例与一般语法（notational conversions and generic grammar）
<p>1. 扩充BNF——name = definition,"literal",rule1 | rule2,(rule1 rule2),*rule,[rule],N rule, #rule,; comment, implied *LWS
<p>2. 基本规则——OCTET,CHAR,UPALPHA,LOALPHA,ALPHA,DIGIT,CTL,CR,LF,SP,HT,&lt;"&gt;
<p>三、协议参数（protocol parameters）
<p>1. HTTP版本——HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT
<p>2. 统一资源标示符（URI）——统一资源定位器(URL)和统一资源名称(URN)的结合，http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
<p>3. 日期/时间格式——Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123，<br />
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036，<br />
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
<p>4. 字符集——本文档中的术语"字符集"指一种用一个或更多表格将一个八字节序列转换成一个字符序列的方法，<br />
charset=token<br />
失踪字符集
<p>5. 内容编码——内容编码主要用来允许文档压缩（信源编码）<br />
content-coding= token<br />
注册表包含下列标记：gzip，compress，deflate，identity
<p>6. 传输编码——目的是能够确保通过网络安全传输（信道编码）<br />
transfer-coding = "chunked" | transfer-extension<br />
transfer-extension = token *( ";" parameter )，<br />
成块传输代码
<p>7. 媒体类型——media-type = type "/" subtype *( ";" parameter )<br />
type = token<br />
subtype = token<br />
规范化和原文缺省<br />
多部分类型
<p>8. 产品标记——product = token ["/" product-version]<br />
product-version = token
<p>9. 质量值——qvalue = ( "0" [ "." 0*3DIGIT ] )| ( "1" [ "." 0*3("0") ] )
<p>10. 语言标记——language-tag = primary-tag *( "-" subtag )<br />
primary-tag = 1*8ALPHA<br />
subtag = 1*8ALPHA
<p>11. 实体标记——entity-tag = [ weak ] opaque-tag<br />
weak = "W/"<br />
opaque-tag = quoted-string
<p>12. 范围单位——range-unit = bytes-unit | other-range-unit<br />
bytes-unit = "bytes"<br />
other-range-unit = token
<p>四、 HTTP消息（HTTP message）
<p>1. 消息类型——HTTP-message = Request | Response ; HTTP/1.1 messages<br />
generic-message = start-line *(message-header CRLF) CRLF [ message-body ]<br />
start-line = Request-Line | Status-Line
<p>2. 消息头——HTTP头域包括常规头,请求头,应答头和实体头域<br />
message-header = field-name ":" [ field-value ]<br />
field-name = token<br />
field-value = *( field-content | LWS )<br />
field-content = &lt;the OCTETs making up the field-value and consisting of either *TEXT or combinations of token, separators, and quoted-string&gt;
<p>3. 消息体——message-body = entity-body| &lt;entity-body encoded as per Transfer-Encoding&gt;
<p>4. 消息的长度——决定因素
<p>5. 常规头域——general-header = Cache-Control| Connection| Date| Pragma| Transfer-Encoding
<p>五、 请求（request）
<p>首行包括利用资源的方式,区分资源的标识,以及协议的版本号<br />
Request = Request-Line * (( general-header| request-header| entity-header ) CRLF) CRLF [ message-body ]
<p>1. 请求行——Request-Line = Method SP Request-URI SP HTTP-Version CRLF<br />
方法——方法标记指的是在请求URI所指定的资源上所实现的方式<br />
Method = "OPTIONS"| "GET"| "POST"| "PUT"| "DELETE"| "TRACE"| "CONNECT"| extension-method<br />
extension-method = token<br />
请求URL——请求URL是一种全球统一的应用于资源请求的资源标识符<br />
Request-URI = "*" | absoluteURI | abs_path | authority<br />
请求行举例：GET <a href="http://www.w3.org/pub/WWW/TheProject.html">http://www.w3.org/pub/WWW/TheProject.html</a> HTTP/1.1<br />
GET /pub/WWW/TheProject.html HTTP/1.1<br />
Host: www.w3.org
<p>2. 请求定义的资源——一个INTERNET请求所定义的精确资源由请求URL和主机报头域所决定
<p>3. 请求报头域——request-header = Accept| Accept-Charset| Accept-Encoding| Accept-Language| Authorization| Expect| From| Host| If-Match| If-Modified-Since| If-None-Match| If-Range| If-Unmodified-Since| Max-Forwards| Proxy-Authorization| Range| Referer| TE| User-Agent
<p>六、 应答（response）
<p>接收和翻译一个请求信息后，服务器发出一个HTTP应答信息<br />
Response = Status-Line*(( general-header| response-header| entity-header ) CRLF) CRLF [ message-body ]
<p>1. 状态行——Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF<br />
状态码——状态码是试图理解和满足请求的三位数字的整数码，1xx,2xx,3xx,4xx,5xx，100-〉505-〉扩展码
<p>2. 应答报头域——response-header = Accept-Ranges| Age| Location| Proxy-Authenticate| Retry-After| Server| Vary| WWW-Authenticate
<p>七、 实体（entity）
<p>在未经特别规定的情况下，请求与应答的消息也可以传送实体。 实体包括实体报头域与实体正文，而有些应答只包括实体报头。
<p>1. 实体报头域——entity-header = Allow | Content-Encoding| Content-Language| Content-Length | Content-Location| Content-MD5| Content-Range| Content-Type| Expires| Last-Modified| extension-header<br />
extension-header = message-header
<p>2. 实体正文——entity-body = *OCTET<br />
entity-body := Content-Encoding( Content-Type( data ) )
<p>八、 连接（connection）
<p>1. 持续连接——优点<br />
持续连接是任何HTTP连接的缺省方式，支持持续连接的客户机可以以流水线方式发送请求<br />
代理服务器
<p>2. 消息传递要求——持续连接与流量控制<br />
监视连接中出错状态的消息<br />
100号状态的用途<br />
服务器过早关闭连接时客户机的动作
<p>九、 方法定义（method definitions）
<p>1. 安全和等幂方法<br />
安全方法——GET和HEAD方法除了补救外不应该有别的采取措施的含义<br />
等幂方法——没有副作用的序列是等幂的
<p>2. OPTIONS——OPTIONS方法代表在请求URI确定的请求/应答过程中通信条件是否可行的信息
<p>3. GET——GET方法说明了重建信息的内容由请求URI来确定
<p>4. HEAD——除了应答中禁止返回消息正文外,HEAD方法与GET方法一样
<p>5. POST——POST方法实现的实际功能取决于服务器
<p>6. PUT——PUT方法要求所附实体存储在提供的请求URI下
<p>7. DELETE——DELELE方法要求原服务器释放请求URI指向的资源
<p>8. TRACE——TRACE方法用于调用远程的应用层循环请求消息
<p>9. CONNECT——CONNECT方法用于能动态建立起隧道的代理服务器
<p>十、 状态码定义（status code definitions）
<p>1. 信息1XX——<br />
100继续<br />
101转换协议
<p>2. 成功2XX——<br />
200请求成功<br />
201创建<br />
202接受<br />
203非权威信息<br />
204无内容<br />
205重置内容<br />
206局部内容
<p>3. 重新定向3XX——<br />
300多样选择<br />
301永久移动<br />
302创立<br />
303观察别的部分<br />
304只读<br />
306(没有用的)<br />
307临时重发
<p>4. 客户错误4xx——<br />
400坏请求<br />
401未授权的<br />
402必需的支付<br />
403禁用<br />
404没有找到<br />
405不被允许的方法<br />
406不接受<br />
407代理服务器认证所必需<br />
408请求超时<br />
409冲突<br />
410停止<br />
411必需的长度<br />
412预处理失败<br />
413请求实体太大<br />
414请求的URI过长<br />
415不被支持的媒体类型<br />
416请求范围不满足<br />
417期望失败
<p>5. 服务器错误5xx——<br />
500服务器内部错误<br />
501不能实现<br />
502坏网关<br />
503难以获得的服务<br />
504网关超时<br />
505 HTTP版本不支持
<p>十一、 访问验证（access authentication）——可选择
<p>十二、 内容谈判（content negotiation）
<p>HTTP为了"内容谈判"提供了一些机制，即当有很多种可能的表示时如何选择对于一个请求的最佳的表示。
<p>1. 服务器驱动谈判——一个请求的最佳表示的选择由服务器提供的运算法则来完成
<p>2. 代理驱动谈判——对于一个应答的最佳表示法的选择是在代理从原服务器端收到最初的应答后实现的
<p>3. 透明谈判——透明的判断是服务器驱动和代理驱动谈判的结合体
<p>十三、 HTTP中的缓存（caching in HTTP）
<p>HTTP典型应用于能通过采用缓存技术而提高性能的分布式信息系统
<p>1. 缓存——<br />
缓存正确性<br />
警告信息<br />
缓存控制机制<br />
直接的用户代理警告<br />
规则和警告的例外情况<br />
由客户控制的行为
<p>2. 过期模型——<br />
服务器指定模型<br />
启发式过期<br />
年龄计算<br />
过期计算<br />
澄清过期值<br />
澄清多重响应
<p>3. 确认模型——当缓存器想要用一个失时效的条目来相应客户的请求,他首先必须向源服务器检验这一缓存条目是否仍然可用<br />
最后修改日期<br />
标签缓存确认器<br />
强弱控制器<br />
关于何时使用实体标签和最后修改时间的规则<br />
不确认条件
<p>4. 响应的缓存能力——除非被明确限制,缓存系统可以将一成功的响应作为缓存实体一直存储
<p>5. 从缓存构造响应——<br />
端到端和Hop-by-hop报头<br />
不可更改报头<br />
联合报头<br />
联合字节范围
<p>6. 缓存谈判响应
<p>7. 共享与非共享缓存
<p>8. 错误和不完全响应缓存行为
<p>9. GET和 HEAD的副作用
<p>10. 刷新或删除后的无效性
<p>11. 强制写通过
<p>12. 缓存替换
<p>13. 历史纪录
<p>十四、 报头域定义（header field definitions）
<p>1. Accept——Accept = "Accept" ":" #( media-range [ accept-params ] )<br />
media-range = ( "*/*"| ( type "/" "*" )| ( type "/" subtype )) *( ";" parameter )<br />
accept-params = ";" "q" "=" qvalue *( accept-extension )<br />
accept-extension = ";" token [ "=" ( token | quoted-string ) ]<br />
例1：Accept: audio/*; q=0.2, audio/basic<br />
例2：Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c
<p>2. Accept-Charset——Accept-Charset = "Accept-Charset" ":" 1#( ( charset | "*" )[ ";" "q" "=" qvalue ] )<br />
例：Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
<p>3. Accept-Encoding——Accept-Encoding = "Accept-Encoding" ":" 1#( codings [ ";" "q" "=" qvalue ] )<br />
codings = ( content-coding | "*" )<br />
例：Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0
<p>4. Accept-Language——Accept-Language = "Accept-Language" ":" 1#( language-range [ ";" "q" "=" qvalue ] )<br />
language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )<br />
例：Accept-Language: da, en-gb;q=0.8, en;q=0.7
<p>5. Accept-Range——Accept-Ranges = "Accept-Ranges" ":" acceptable-ranges<br />
acceptable-ranges = 1#range-unit | "none"<br />
例：Accept-Ranges: bytes
<p>6. Age——Age = "Age" ":" age-value<br />
age-value = delta-seconds
<p>7. Allow——Allow = "Allow" ":" #Method<br />
例：Allow: GET, HEAD, PUT
<p>8. Authorization——Authorization = "Authorization" ":" credentials
<p>9. Cache-Control——Cache-Control = "Cache-Control" ":" 1#cache-directive<br />
cache-directive = cache-request-directive| cache-response-directive<br />
cache-request-directive ="no-cache"| "no-store"| "max-age" "=" delta-seconds| "max-stale" [ "=" delta-seconds ]| "min-fresh" "=" delta-seconds| "no-transform"| "only-if-cached"| cache-extension<br />
cache-response-directive ="public"| "private" [ "=" &lt;"&gt; 1#field-name &lt;"&gt; ]| "no-cache" [ "=" &lt;"&gt; 1#field-name &lt;"&gt; ]| "no-store"| "no-transform"| "must-revalidate"| "proxy-revalidate"| "max-age" "=" delta-seconds| "s-maxage" "=" delta-seconds| cache-extension<br />
cache-extension = token [ "=" ( token | quoted-string ) ]<br />
什么是可缓存的<br />
哪些可能被缓存保存<br />
对基本过期失效机制的改进<br />
缓存重新确认有效和重载控制<br />
不得转换的指令<br />
缓存控制扩展
<p>10. Connection——Connection = "Connection" ":" 1#(connection-token)<br />
connection-token = token<br />
例：Connection: close
<p>11. Content-Encoding——Content-Encoding = "Content-Encoding" ":" 1#content-coding<br />
例：Content-Encoding: gzip
<p>12. Content-Language——Content-Language = "Content-Language" ":" 1#language-tag<br />
例：Content-Language: mi, en
<p>13. Content-Length——Content-Length = "Content-Length" ":" 1*DIGIT<br />
Content-Length: 3495
<p>14. Content-Location——Content-Location = "Content-Location" ":"( absoluteURI | relativeURI )
<p>15. Content-MD5——Content-MD5 = "Content-MD5" ":" md5-digest<br />
md5-digest = &lt;base64 of 128 bit MD5 digest as per RFC 1864&gt;
<p>16. Content-Range——Content-Range = "Content-Range" ":" content-range-spec<br />
content-range-spec = byte-content-range-spec<br />
byte-content-range-spec = bytes-unit SP byte-range-resp-spec "/"( instance-length | "*" )<br />
byte-range-resp-spec = (first-byte-pos "-" last-byte-pos) | "*"<br />
instance-length = 1*DIGIT<br />
例：The first 500 bytes:bytes 0-499/1234
<p>17. Content-Type——Content-Type = "Content-Type" ":" media-type<br />
例：Content-Type: text/html; charset=ISO-8859-4
<p>18. Date——Date = "Date" ":" HTTP-date<br />
例：Date: Tue, 15 Nov 1994 08:12:31 GMT<br />
没有时钟的原服务器的运作
<p>19. Etag——ETag = "ETag" ":" entity-tag<br />
例：ETag: W/"xyzzy"
<p>20. Expect——Expect = "Expect" ":" 1#expectation<br />
expectation = "100-continue" | expectation-extension<br />
expectation-extension = token [ "=" ( token | quoted-string )*expect-params ]<br />
expect-params = ";" token [ "=" ( token | quoted-string ) ]
<p>21. Expires——Expires = "Expires" ":" HTTP-date<br />
例：Expires: Thu, 01 Dec 1994 16:00:00 GMT
<p>22. From——From = "From" ":" mailbox<br />
例：From: webmaster@w3.org
<p>23. Host——Host = "Host" ":" host [ ":" port ] ; Section 3.2.2
<p>24. If-Match——If-Match = "If-Match" ":" ( "*" | 1#entity-tag )<br />
例：If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
<p>25. If-Modified-Since——If-Modified-Since = "If-Modified-Since" ":" HTTP-date<br />
例：If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
<p>26. If-None-Match ——If-None-Match = "If-None-Match" ":" ( "*" | 1#entity-tag )<br />
例：If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz"
<p>27. If-Range ——If-Range = "If-Range" ":" ( entity-tag | HTTP-date )
<p>28. If-Unmodified-Since ——If-Unmodified-Since = "If-Unmodified-Since" ":" HTTP-date<br />
例：If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT
<p>29. Last-Modified ——Last-Modified = "Last-Modified" ":" HTTP-date<br />
例：Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
<p>30. Location ——Location = "Location" ":" absoluteURI<br />
Location: <a href="http://www.w3.org/pub/WWW/People.html">http://www.w3.org/pub/WWW/People.html</a>
<p>31. Max-Forwards ——Max-Forwards = "Max-Forwards" ":" 1*DIGIT
<p>32. Pragma ——Pragma = "Pragma" ":" 1#pragma-directive<br />
pragma-directive = "no-cache" | extension-pragma<br />
extension-pragma = token [ "=" ( token | quoted-string ) ]
<p>33. Proxy-Authenticate ——Proxy-Authenticate = "Proxy-Authenticate" ":" 1#challenge
<p>34. Proxy-Authorization ——Proxy-Authorization = "Proxy-Authorization" ":" credentials
<p>35. Range——字节范围<br />
范围检索请求<br />
Range = "Range" ":" ranges-specifier
<p>36. Referer——Referer = "Referer" ":" ( absoluteURI | relativeURI )
<p>37. Retry-After ——Retry-After = "Retry-After" ":" ( HTTP-date | delta-seconds )
<p>38. Server ——Server = "Server" ":" 1*( product | comment )
<p>39. TE ——TE = "TE" ":" #( t-codings )<br />
t-codings = "trailers" | ( transfer-extension [ accept-params ] )<br />
例：TE: trailers, deflate;q=0.5
<p>40. Trailer ——Trailer = "Trailer" ":" 1#field-name
<p>41. Transfer-Encoding ——Transfer-Encoding = "Transfer-Encoding" ":" 1#transfer-coding<br />
例：Transfer-Encoding: chunked
<p>42. Upgrade——Upgrade = "Upgrade" ":" 1#product<br />
例：Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
<p>43. User-Agent ——User-Agent = "User-Agent" ":" 1*( product | comment )<br />
例：User-Agent: CERN-LineMode/2.15 libwww/2.17b3
<p>44. Vary ——Vary = "Vary" ":" ( "*" | 1#field-name )
<p>45. Via ——Via = "Via" ":" 1#( received-protocol received-by [ comment ] )<br />
received-protocol = [ protocol-name "/" ] protocol-version<br />
protocol-name = token<br />
protocol-version = token<br />
received-by = ( host [ ":" port ] ) | pseudonym<br />
pseudonym = token<br />
例：Via: 1.0 ricky, 1.1 ethel, 1.1 fred, 1.0 lucy
<p>46. Warning = "Warning" ":" 1#warning-value<br />
warning-value = warn-code SP warn-agent SP warn-text [SP warn-date]<br />
warn-code = 3DIGIT<br />
warn-agent = ( host [ ":" port ] ) | pseudonym<br />
warn-text = quoted-string<br />
warn-date = &lt;"&gt; HTTP-date &lt;"&gt;
<p>47. WWW-Authenticate ——WWW-Authenticate = "WWW-Authenticate" ":" 1#challenge
<p>十五、 安全考虑（security considerations）
<p>一些建议，但是并不包括最终解决方案
<p>1. 个人信息<br />
服务器日志信息的滥用<br />
敏感信息的传输<br />
URI中敏感信息的编码<br />
连接到Accept报头的机要问题
<p>2. 基于文件和路径名称的攻击
<p>3. DNS欺骗
<p>4. Location（位置）报头和欺骗
<p>5. 内容倾向问题
<p>6. 鉴定证书和空闲的客户机
<p>7. 代理服务器和高速缓存<br />
对代理服务器的拒绝服务攻击
<p>十六、 感谢
<p>十七、 参考文献
<p>十八、 作者地址
<p>十九、 附录</p>
</div>
<img src ="http://www.blogjava.net/daniel-tu/aggbug/248887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/daniel-tu/" target="_blank">井中月</a> 2008-12-29 14:11 <a href="http://www.blogjava.net/daniel-tu/archive/2008/12/29/248887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MIME邮件格式说明</title><link>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248886.html</link><dc:creator>井中月</dc:creator><author>井中月</author><pubDate>Mon, 29 Dec 2008 06:10:00 GMT</pubDate><guid>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248886.html</guid><wfw:comment>http://www.blogjava.net/daniel-tu/comments/248886.html</wfw:comment><comments>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248886.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/daniel-tu/comments/commentRss/248886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/daniel-tu/services/trackbacks/248886.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 邮件格式说明Mutiple Internet Mail ExtensionsRefer to Internet Official Protocol Standards RFC 8221&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 概述网络间传递的电子邮件需要公共认同的格式，以便于客户端邮箱软件识别拆解其间的信息。邮件本身是由ASCII字符构成...&nbsp;&nbsp;<a href='http://www.blogjava.net/daniel-tu/archive/2008/12/29/248886.html'>阅读全文</a><img src ="http://www.blogjava.net/daniel-tu/aggbug/248886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/daniel-tu/" target="_blank">井中月</a> 2008-12-29 14:10 <a href="http://www.blogjava.net/daniel-tu/archive/2008/12/29/248886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>负载均衡（Load Balance） </title><link>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248885.html</link><dc:creator>井中月</dc:creator><author>井中月</author><pubDate>Mon, 29 Dec 2008 06:09:00 GMT</pubDate><guid>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248885.html</guid><wfw:comment>http://www.blogjava.net/daniel-tu/comments/248885.html</wfw:comment><comments>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/daniel-tu/comments/commentRss/248885.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/daniel-tu/services/trackbacks/248885.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于目前现有网络的各个核心部分随着业务量的提高，访问量和数据流量的快速增长，其处理能力和计算强度也相应地增大，使得单一的服务器设备根本无法承担。在此情况下，如果扔掉现有设备去做大量的硬件升级，这样将造成现有资源的浪费，而且如果再面临下一次业务量的提升时，这又将导致再一次硬件升级的高额成本投入，甚至性能再卓越的设备也不能满足当前业务量增长的需求。
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　针对此情况而衍生出来的一种廉价有效透明的方法以扩展现有网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的来实现的，在DNS中为多个地址配置同一个名字，因而查询这个名字的客户机将得到其中一个地址，从而使得不同的客户访问不同的服务器，达到负载均衡的目的。DNS负载均衡是一种简单而有效的方法，但是它不能区分服务器的差异，也不能反映服务器的当前运行状态。 </span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　2、代理服务器负载均衡 使用代理服务器，可以将请求转发给内部的服务器，使用这种加速模式显然可以提升静态网页的访问速度。然而，也可以考虑这样一种技术，使用代理服务器将请求均匀转发给多台服务器，从而达到负载均衡的目的。 </span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　3、地址转换网关负载均衡 支持负载均衡的地址转换网关，可以将一个外部IP地址映射为多个内部IP地址，对每次TCP连接请求动态使用其中一个内部地址，达到负载均衡的目的。 </span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　4、协议内部支持负载均衡 除了这三种负载均衡方式之外，有的协议内部支持与负载均衡相关的功能，例如HTTP协议中的重定向能力等，HTTP运行于TCP连接的最高层。 </span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　5、NAT负载均衡 NAT（Network Address Translation 网络地址转换）简单地说就是将一个IP地址转换为另一个IP地址，一般用于未经注册的内部地址与合法的、已获注册的Internet IP地址间进行转换。适用于解决Internet IP地址紧张、不想让网络外部知道内部网络结构等的场合下。</span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　此种负载均衡是当前多WAN口路由器的带宽汇聚技术基础，以欣向路由器为例：</span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　欣向的多WAN路由器实现的是业界先进的动态负载平衡机制，我们独立研发的多WAN口动态负载平衡技术，使得在使用多条线路的情况下动态分配内网的数据流量，动态的实现带宽汇聚的功能，采用特有的三种负载平衡机制： </span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　a．Session：所有启用的WAN口，采用均分session的方式工作。</span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　如第一个连接session通过WAN1口流出，则下一个session自动选择WAN2流出，第三个session选择WAN3口流出（假设所有WAN口都启用）</span></p>
<p style="text-indent: 24pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">这种方式适用于多条相同带宽的线路捆绑时使用。</span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">b</span><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">．Round robin：同样是根据session数目调整负载，但比例可调。</span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　如将比例设为1：2：3：4，则按如下规则处理： </span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　第1个session选择WAN1口（session数=1）；</span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　第2，3个 session选择WAN2口（session数=2）；</span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　第4 ~ 6个 session 选择WAN3口（session数=3）；</span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　第7 ~ 10个session选择WAN4口（session数=4）；</span></p>
<p style="text-indent: 24pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">这种方式适用于多条不同带宽的线路能够更好的协同工作。例如：WAN1口接一条512K的ADSL，WAN2口接2M的光纤，这种情况下我们就可以把比例设为1：4，这样能够充分利用两条线路的带宽。</span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">c</span><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">．Traffic：按数据流量分配负载，系统自动选择流量最小的WAN口作为出口。</span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　此种方式适用于线路不稳定时的多条线路混用的情况。在某一条线路暂时不通或者线路不稳定的情况下会把流量自动分配到另一条稳定的线路上。但在多条线路稳定的情况下不建议使用这种方式。</span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　有了这三种负载平衡使得路由器可以灵活的应对多种线路混用的复杂情况，支持多种线路混接，支持多种协议，能够满足多种复杂应用。</span></p>
<p style="line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　6、反向代理负载均衡 普通代理方式是代理内部网络用户访问internet上服务器的连接请求，客户端必须指定代理服务器,并将本来要直接发送到internet上服务器的连接请求发送给代理服务器处理。反向代理（Reverse Proxy）方式是指以代理服务器来接受internet上的连接请求，然后将请求转发给内部网络上的服务器，并将从服务器上得到的结果返回给internet上请求连接的客户端，此时代理服务器对外就表现为一个服务器。反向代理负载均衡技术是把将来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理，从而达到负载均衡的目的。 </span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; letter-spacing: 0.4pt">　　7、混合型负载均衡 在有些大型网络，由于多个服务器群内硬件设备、各自的规模、提供的服务等的差异，我们可以考虑给每个服务器群采用最合适的负载均衡方式，然后又在这多个服务器群间再一次负载均衡或群集起来以一个整体向外界提供服务（即把这多个服务器群当做一个新的服务器群），从而达到最佳的性能。我们将这种方式称之为混合型负载均衡。此种方式有时也用于单台均衡设备的性能不能满足大量连接请求的情况下。</span></p><img src ="http://www.blogjava.net/daniel-tu/aggbug/248885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/daniel-tu/" target="_blank">井中月</a> 2008-12-29 14:09 <a href="http://www.blogjava.net/daniel-tu/archive/2008/12/29/248885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>三大WEB服务器对比分析（apache ,lighttpd,nginx） </title><link>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248883.html</link><dc:creator>井中月</dc:creator><author>井中月</author><pubDate>Mon, 29 Dec 2008 06:03:00 GMT</pubDate><guid>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248883.html</guid><wfw:comment>http://www.blogjava.net/daniel-tu/comments/248883.html</wfw:comment><comments>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248883.html#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://www.blogjava.net/daniel-tu/comments/commentRss/248883.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/daniel-tu/services/trackbacks/248883.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一．软件介绍(apache&nbsp; lighttpd&nbsp; nginx)1. lighttpdLighttpd是一个具有非常低的内存开销，cpu占用率低，效能好，以及丰富的模块等特点。lighttpd是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Ali...&nbsp;&nbsp;<a href='http://www.blogjava.net/daniel-tu/archive/2008/12/29/248883.html'>阅读全文</a><img src ="http://www.blogjava.net/daniel-tu/aggbug/248883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/daniel-tu/" target="_blank">井中月</a> 2008-12-29 14:03 <a href="http://www.blogjava.net/daniel-tu/archive/2008/12/29/248883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>专门介绍Prototype框架扩展库的站点</title><link>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248863.html</link><dc:creator>井中月</dc:creator><author>井中月</author><pubDate>Mon, 29 Dec 2008 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248863.html</guid><wfw:comment>http://www.blogjava.net/daniel-tu/comments/248863.html</wfw:comment><comments>http://www.blogjava.net/daniel-tu/archive/2008/12/29/248863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/daniel-tu/comments/commentRss/248863.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/daniel-tu/services/trackbacks/248863.html</trackback:ping><description><![CDATA[<div class="postcontent">prototype是什么大家都知道吧，为喜欢Prototype的朋友们推荐一个站，相信一定喜欢，<br />
<br />
网址：<a href="http://scripteka.com/" target="_blank"><u><font color="#800080">http://scripteka.com/ </font></u></a><br />
<br />
该站是一个专门介绍Prototype框架扩展库的站点。 </div>
  <img src ="http://www.blogjava.net/daniel-tu/aggbug/248863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/daniel-tu/" target="_blank">井中月</a> 2008-12-29 11:53 <a href="http://www.blogjava.net/daniel-tu/archive/2008/12/29/248863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>