﻿<?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/silentjesse/category/37771.html</link><description>祝您一生平安</description><language>zh-cn</language><lastBuildDate>Sat, 25 Jul 2009 22:15:57 GMT</lastBuildDate><pubDate>Sat, 25 Jul 2009 22:15:57 GMT</pubDate><ttl>60</ttl><item><title>http之消息报头</title><link>http://www.blogjava.net/silentjesse/articles/http.html</link><dc:creator>自己的平淡</dc:creator><author>自己的平淡</author><pubDate>Tue, 21 Jul 2009 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/silentjesse/articles/http.html</guid><wfw:comment>http://www.blogjava.net/silentjesse/comments/287587.html</wfw:comment><comments>http://www.blogjava.net/silentjesse/articles/http.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/silentjesse/comments/commentRss/287587.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/silentjesse/services/trackbacks/287587.html</trackback:ping><description><![CDATA[<span style="font-family: 黑体">对http的阐述:</span><br />
<span style="font-size: 10pt">HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由<span style="font-size: 12pt; font-family: 隶书">开始行</span>（对<br />
于请求消息，开始行就是请求行，对于响应消息，开始行就是状态行），<span style="font-size: 12pt; font-family: 隶书">消息报头</span>（可选），<span style="font-size: 12pt; font-family: 隶书">空行</span>（只有<br />
CRLF的行），<span style="font-size: 12pt; font-family: 隶书">消息正文</span>（可选）组成。<br />
<br />
<br />
<span style="font-size: 12pt; font-family: 黑体">对消息报头的阐述：<br />
</span>
<p><font color="#000000">HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。<br />
每一个报头域都是由<span style="font-size: 12pt; font-family: 隶书">名字+&#8220;：&#8221;+空格+值 </span>组成，消息报头域的名字是大小写无关的。</font></p>
<p><font color="#000000">1、普通报头<br />
在普通报头中，有少数报头域用于所有的请求和响应消息，但并不用于被传输的实体，只用于传输的消息。<br />
eg：<br />
Cache-Control&nbsp;&nbsp; 用于指定缓存指令，缓存指令是单向的（响应中出现的缓存指令在请求中未必会出现），且是<br />
独立的（一个消息的缓存指令不会影响另一个消息处理的缓存机制），HTTP1.0使用的类似的报头域为Pragma。<br />
请求时的缓存指令包括：no-cache（用于指示请求或响应消息不能缓存）、no-store、max-age、max-stale、min-<br />
fresh、only-if-cached;<br />
响应时的缓存指令包括：public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、<br />
max-age、s-maxage.<br />
eg：为了指示IE浏览器（客户端）不要缓存页面，服务器端的JSP程序可以编写如下：response.sehHeader<br />
("Cache-Control","no-cache");<br />
//response.setHeader("Pragma","no-cache");作用相当于上述代码，通常两者//合用<br />
这句代码将在发送的响应消息中设置普通报头域：Cache-Control:no-cache</font></p>
<p><br />
<font color="#000000">Date普通报头域表示消息产生的日期和时间</font></p>
<p><font color="#000000">Connection普通报头域允许发送指定连接的选项。例如指定连接是连续，或者指定&#8220;close&#8221;选项，通知服务<br />
器，在响应完成后，关闭连接<br />
</font></p>
<p><font color="#000000">2、请求报头<br />
请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。<br />
常用的请求报头<br />
Accept<br />
Accept请求报头域用于指定客户端接受哪些类型的信息。eg：Accept：image/gif，表明客户端希望接受GIF图象<br />
格式的资源；Accept：text/html，表明客户端希望接受html文本。<br />
Accept-Charset<br />
Accept-Charset请求报头域用于指定客户端接受的字符集。eg：Accept-Charset:iso-8859-1,gb2312.如果在请求消<br />
息中没有设置这个域，缺省是任何字符集都可以接受。<br />
Accept-Encoding<br />
Accept-Encoding请求报头域类似于Accept，但是它是用于指定可接受的内容编码。eg：Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。<br />
Accept-Language<br />
Accept-Language请求报头域类似于Accept，但是它是用于指定一种自然语言。eg：Accept-Language:zh-cn.如果请<br />
求消息中没有设置这个报头域，服务器假定客户端对各种语言都可以接受。<br />
Authorization<br />
Authorization请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时，如果收到服务器<br />
的响应代码为401（未授权），可以发送一个包含Authorization请求报头域的请求，要求服务器对其进行验证。<br />
Host（发送请求时，该报头域是必需的）<br />
Host请求报头域主要用于指定被请求资源的Internet主机和端口号，它通常从HTTP URL中提取出来的，eg：<br />
我们在浏览器中输入：</font><a href="http://www.guet.edu.cn/index.html"><font color="#000000">http://www.guet.edu.cn/index.html</font></a><br />
<font color="#000000">浏览器发送的请求消息中，就会包含Host请求报头域，如下：<br />
Host：</font><a href="http://www.guet.edu.cn/"><font color="#000000">www.guet.edu.cn</font></a><br />
<font color="#000000">此处使用缺省端口号80，若指定了端口号，则变成：Host：</font><a href="http://www.guet.edu.cn/"><font color="#000000">www.guet.edu.cn</font></a><font color="#000000">:指定端口号<br />
User-Agent<br />
我们上网登陆论坛的时候，往往会看到一些欢迎信息，其中列出了你的操作系统的名称和版本，你所使用的<br />
浏览器的名称和版本，这往往让很多人感到很神奇，实际上，服务器应用程序就是从User-Agent这个请求报头<br />
域中获取到这些信息。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不<br />
过，这个报头域不是必需的，如果我们自己编写一个浏览器，不使用User-Agent请求报头域，那么服务器端就<br />
无法得知我们的信息了。<br />
请求报头举例：<br />
GET /form.html HTTP/1.1 (CRLF)<br />
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-<br />
powerpoint,application/msword,*/* (CRLF)<br />
Accept-Language:zh-cn (CRLF)<br />
Accept-Encoding:gzip,deflate (CRLF)<br />
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)<br />
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)<br />
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)<br />
Host:www.guet.edu.cn (CRLF)<br />
Connection:Keep-Alive (CRLF)<br />
(CRLF)</font></p>
<p><font color="#000000">3、响应报头<br />
响应报头允许服务器传递不能放在状态行中的附加响应信息，以及关于服务器的信息和对Request-URI所标识<br />
的资源进行下一步访问的信息。<br />
常用的响应报头<br />
Location<br />
Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。<br />
Server<br />
Server响应报头域包含了服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的。下面是<br />
Server响应报头域的一个例子：<br />
Server：Apache-Coyote/1.1<br />
WWW-Authenticate<br />
WWW-Authenticate响应报头域必须被包含在401（未授权的）响应消息中，客户端收到401响应消息时候，并发<br />
送Authorization报头域请求服务器对其进行验证时，服务端响应报头就包含该报头域。<br />
eg：WWW-Authenticate:Basic realm="Basic Auth Test!"&nbsp; //可以看出服务器对请求资源采用的是基本验证机制。</font></p>
<p><br />
<font color="#000000">4、实体报头<br />
请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成，但并不是说实体报头域和实体正文要在一起发送，可以只发送实体报头域。实体报头定义了关于实体正文（eg：有无实体正文）和请求所标识的资源的元信息。<br />
常用的实体报头<br />
Content-Encoding<br />
Content-Encoding实体报头域被用作媒体类型的修饰符，它的值指示了已经被应用到实体正文的附加内容的编<br />
码，因而要获得Content-Type报头域中所引用的媒体类型，必须采用相应的解码机制。Content-Encoding这样用<br />
于记录文档的压缩方法，eg：Content-Encoding：gzip<br />
Content-Language<br />
Content-Language实体报头域描述了资源所用的自然语言。没有设置该域则认为实体内容将提供给所有的语言<br />
阅读<br />
者。eg：Content-Language:da<br />
Content-Length<br />
Content-Length实体报头域用于指明实体正文的长度，以字节方式存储的十进制数字来表示。<br />
Content-Type<br />
Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。eg：<br />
Content-Type:text/html;charset=ISO-8859-1<br />
Content-Type:text/html;charset=GB2312<br />
Last-Modified<br />
Last-Modified实体报头域用于指示资源的最后修改日期和时间。<br />
Expires<br />
Expires实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次<br />
访问曾访问过的页面时，直接从缓存中加载，缩短响应时间和降低服务器负载)的页面，我们可以使用Expires<br />
实体报头域指定页面过期的时间。eg：Expires：Thu，15 Sep 2006 16:23:12 GMT<br />
HTTP1.1的客户端和缓存必须将其他非法的日期格式（包括0）看作已经过期。eg：为了让浏览器不要缓存页<br />
面，我们也可以利用Expires实体报头域，设置为0，jsp中程序如下：response.setDateHeader("Expires","0");</font></p>
</span>
<img src ="http://www.blogjava.net/silentjesse/aggbug/287587.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/silentjesse/" target="_blank">自己的平淡</a> 2009-07-21 10:32 <a href="http://www.blogjava.net/silentjesse/articles/http.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>http请求之请求行</title><link>http://www.blogjava.net/silentjesse/articles/httprequest.html</link><dc:creator>自己的平淡</dc:creator><author>自己的平淡</author><pubDate>Tue, 21 Jul 2009 02:15:00 GMT</pubDate><guid>http://www.blogjava.net/silentjesse/articles/httprequest.html</guid><wfw:comment>http://www.blogjava.net/silentjesse/comments/287581.html</wfw:comment><comments>http://www.blogjava.net/silentjesse/articles/httprequest.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/silentjesse/comments/commentRss/287581.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/silentjesse/services/trackbacks/287581.html</trackback:ping><description><![CDATA[<p style="font-family: 宋体"><span style="font-size: 10pt">http阐述:<br />
http请求由三部分组成，分别是：请求行、消息报头、请求正文<br />
但由于消息报头和请求正文之间有一个"CRLF"<br />
&nbsp;所以我自己定义为四部分<br />
即:<br />
请求行<br />
消息报头<br />
CRLF<br />
正文<br />
<br />
<br />
请求行阐述：<br />
</span></p>
<p><span style="font-size: 10pt">1、请求行以一个方法符号开头，以空格分开，后面跟着请求的URI和协议的版本，格式如下：Method Request-<br />
URI HTTP-Version CRLF&nbsp; <br />
其中 Method表示请求方法；Request-URI是一个统一资源标识符；HTTP-Version表示请求的HTTP协议版本；<br />
CRLF表示回车和换行（除了作为结尾的CRLF外，不允许出现单独的CR或LF字符）。<br />
</span></p>
<p><span style="font-size: 10pt">请求方法（所有方法全为大写）有多种，各个方法的解释如下：<br />
GET&nbsp;&nbsp;&nbsp;&nbsp; 请求获取Request-URI所标识的资源<br />
POST&nbsp;&nbsp;&nbsp; 在Request-URI所标识的资源后附加新的数据<br />
HEAD&nbsp;&nbsp;&nbsp; 请求获取由Request-URI所标识的资源的响应消息报头<br />
PUT&nbsp;&nbsp;&nbsp;&nbsp; 请求服务器存储一个资源，并用Request-URI作为其标识<br />
DELETE&nbsp; 请求服务器删除Request-URI所标识的资源<br />
TRACE&nbsp;&nbsp; 请求服务器回送收到的请求信息，主要用于测试或诊断<br />
CONNECT 保留将来使用<br />
OPTIONS 请求查询服务器的性能，或者查询与资源相关的选项和需求<br />
应用举例：<br />
GET方法：在浏览器的地址栏中输入网址的方式访问网页时，浏览器采用GET方法向服务器获取资源，<br />
eg:GET /form.html HTTP/1.1 (CRLF)</span></p>
<p><span style="font-size: 10pt">POST方法要求被请求服务器接受附在请求后面的数据，常用于提交表单。<br />
eg：POST /reg.jsp HTTP/ (CRLF)<br />
Accept:image/gif,image/x-xbit,... (CRLF)<br />
...<br />
HOST:www.guet.edu.cn (CRLF)<br />
Content-Length:22 (CRLF)<br />
Connection:Keep-Alive (CRLF)<br />
Cache-Control:no-cache (CRLF)<br />
(CRLF)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //该CRLF表示消息报头已经结束，在此之前为消息报头<br />
user=jeffrey&amp;pwd=1234&nbsp; //此行以下为提交的数据</span></p>
<p><span style="font-size: 10pt">HEAD方法与GET方法几乎是一样的，对于HEAD请求的回应部分来说，它的HTTP头部中包含的信息与通过<br />
GET请求所得到的信息是相同的。利用这个方法，不必传输整个资源内容，就可以得到Request-URI所标识的资<br />
源的信息。该方法常用于测试超链接的有效性，是否可以访问，以及最近是否更新。</span></p>
<p><span style="font-size: 10pt"><br />
</span></p>
<img src ="http://www.blogjava.net/silentjesse/aggbug/287581.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/silentjesse/" target="_blank">自己的平淡</a> 2009-07-21 10:15 <a href="http://www.blogjava.net/silentjesse/articles/httprequest.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>