JR6})qgx.H+M0HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,响应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
;N,\\o6{ Y pR7W0通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。51Testing软件测试网*A4Kh$t7QNy,f
51Testing软件测试网&p!kPeT
通用头域51Testing软件测试网
W:z T ld@
d*ONGh$j5l0通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个在UPnP消息中使用的通用头域。51Testing软件测试网~2zC g{0T z)p[
Cache-Control头域
#cX mWHC0Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。
j^"YSf#K0各个消息中的指令含义如下:
q(^ u]5F*w0Public指示响应可被任何缓存区缓存。<BR>
G6O7@ i8DS0Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
Q]W'Q.b8T6bQL\y0no-cache指示请求或响应消息不能缓存51Testing软件测试网,V qk3Vu R.I
no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
~;g:|J
T4h9bE-O0max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。51Testing软件测试网M3]%CS`9E7i
i6u5E
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
jO(^X1Tu8S?-H0max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
Wf g?x_V%}0Date头域51Testing软件测试网B!m'_Z:i:M9Q-]
Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。51Testing软件测试网` f&_Xiu:M(L
Pragma头域
Ze)Q'CoD1L0Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。51Testing软件测试网{X7}9@%wJU.[ o3c4p
51Testing软件测试网-TRVV#_+?
请求消息
z}!f%@uoA0
&d2D2Y'b;J
q,XL0请求消息的第一行为下面的格式:51Testing软件测试网K}DuN:Oxy]
MethodSPRequest-URISPHTTP-VersionCRLF
Zr%L7TzS0Method表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE。
9_6a B*HA6y6a0方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。GET方法取回由Request-URI标识的信息。HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。51Testing软件测试网R4OQh8NQ+h:LI(e
POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。
r0z6q1p4IE4r0SP表示空格。51Testing软件测试网&]#e+k W
T i0F Sp!z-G
Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。
6i
Sv)u J(J1`0HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。51Testing软件测试网 i\Y[#g?W#z q
CRLF表示换行回车符。请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。51Testing软件测试网 OiA)VbIaA
请求头域可能包含下列字段Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If-Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、Proxy-Authorization、Range、Referer、User-Agent。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。51Testing软件测试网TV]:c6h }#M
Host头域
hMpmV-V^!M'I0Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。
i$c7YK?,Z0Referer头域51Testing软件测试网/cw8V2UY
Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。
Q.n.Nb9u,f;G]#]0Y9|0Range头域
)E9H
llK@$p0Range头域可以请求实体的一个或者多个子范围。例如,
,~lg|-\I]6N(`j:[n0表示头500个字节:bytes=0-499
z%U$]6kW0表示第二个500字节:bytes=500-99951Testing软件测试网S4p1]S
Y-Z(g@,h#G
表示最后500个字节:bytes=-500
2tO+ED3H0表示500字节以后的范围:bytes=500-
qk-R(~^LYMm0第一个和最后一个字节:bytes=0-0,-1
(yI9bG6|5U0同时指定几个范围:bytes=500-600,601-999
1w:\1?^a0但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200(OK)。
&i2D$J3Y V
{Q4PB
\0User-Agent头域
F0IT/C~.o0User-Agent头域的内容包含发出请求的用户信息。
p$g-c^b `q)HX051Testing软件测试网tKWKY8g
p
hqUg-Z&_
响应消息51Testing软件测试网
m_|5N [`$fd,F[v
s@4Z ^1D{0响应消息的第一行为下面的格式:
o3W!U(CQ\@0HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF
yU
v3{(H%x}U)e9@0HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。Status-Code是一个三个数字的结果代码。Reason-Phrase给Status-Code提供一个简单的文本描述。Status-Code主要用于机器自动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:51Testing软件测试网T;wtgegV6s)C:_ G]
1xx:信息响应类,表示接收到请求并且继续处理51Testing软件测试网+UP],nmb q
2xx:处理成功响应类,表示动作被成功接收、理解和接受
Hz%}d1R ]3yv2G03xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
a,Z'I0?.i(ah o*K04xx:客户端错误,客户请求包含语法错误或者是不能正确执行
n`Jf7q'L05xx:服务端错误,服务器不能正确执行一个正确的请求51Testing软件测试网]g4h.I0Sw8@b
响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry-After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。51Testing软件测试网p]L4}:k!E9Dh"Y
Location响应头
$V O#wp^@E0Location响应头用于重定向接收者到一个新URI地址。51Testing软件测试网
IO;W UTe8@W#|'k
Server响应头<BR><BR>Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。
^+hu%F2W051Testing软件测试网f+ed9U%M{I
实体51Testing软件测试网Y^k
B:ei[
)Ch/Y.|;Qj$[0U0请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content-Base、Content-Encoding、Content-Language、Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、Etag、Expires、Last-Modified、extension-header。extension-header允许客户端定义新的实体头,但是这些域可能无法未接受方识别。实体可以是一个经过编码的字节流,它的编码方式由Content-Encoding或Content-Type定义,它的长度由Content-Length或Content-Range定义。
]~
g8w \0Content-Type实体头51Testing软件测试网'b"[X)h2T
Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型51Testing软件测试网]-NK2i-WACit%D;T
Content-Range实体头51Testing软件测试网N4LD~y7?a4[
Content-Range实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:
y/L!f?c0Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth51Testing软件测试网_(Ua6~,P/e*w$~M9a
V
例如,传送头500个字节次字段的形式:Content-Range:bytes0-499/1234如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围,Content-Length表示实际传送的字节数。
zG2d3Pmt+S{0Last-modified实体头51Testing软件测试网L#Eo7e!a
Last-modified实体头指定服务器上保存内容的最后修订时间。51Testing软件测试网zbp|a6^V
51Testing软件测试网
]R |*~eP(|4d}
下面是通过IE访问apache web服务器上的1k静态页面的例子:51Testing软件测试网zo[Aj0a!iSP
"GET /1k.htm HTTP/1.1\r\n"51Testing软件测试网'[P*ZD2eht
"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/v"
,[!u"IN+_DD_0 "nd.ms-powerpoint, application/vnd.ms-excel, application/msword, applicatio"
+tKd5HA/Y0 "n/x-shockwave-flash, */*\r\n"51Testing软件测试网x'D Y_&a,L
"Accept-Language: zh-cn\r\n"51Testing软件测试网C\L`aA@
"Accept-Encoding: gzip, deflate\r\n"
`+@&Q
E4c,I,JQ~0 "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n"
%^AW|m0 "Host: 192.168.0.16:8001\r\n"
Mh1KXMZ0 "Connection: Keep-Alive\r\n"51Testing软件测试网aAw0SUHf
"\r\n"
y;wf/D B"c.Pi0 "HTTP/1.1 200 OK\r\n"
0RbG3^ yy1^b0 "Date: Thu, 13 Jul 2006 01:46:27 GMT\r\n"51Testing软件测试网d8p6_ mCZL7u
"Server: Apache/2.0.53 (Unix)\r\n"51Testing软件测试网r&a/q${"x
"Last-Modified: Thu, 29 Jun 2006 11:49:19 GMT\r\n"51Testing软件测试网f^^9Eo;A'm+[
"ETag: \"18c3c3-56-85accdc0\"\r\n"51Testing软件测试网 RZ7h;]u9C
"Accept-Ranges: bytes\r\n"51Testing软件测试网db \[5t:z,sn
"Content-Length: 86\r\n"
c+}_8`
oU0 "Keep-Alive: timeout=15, max=100\r\n"
&Sb_7j8J4DEn0 "Connection: Keep-Alive\r\n"51Testing软件测试网/_*U2slx(z
"Content-Type: text/html\r\n"
:rq/M"B`E$k0 "\r\n"51Testing软件测试网_?ckj1@9B
"<html>\r\n"51Testing软件测试网V3P Bk]DJe%M
"<body>\r\n"
6A:X$^ ];gtB wC%@0 "tttttttttttttttttttttttttttttttttttttttttttttttttt\r\n"51Testing软件测试网S9b(g g%y2Z
"</body>\r\n"
&y5W1PR-b(N.fy#RH0 "</html>\r\n"51Testing软件测试网N5B[6H/B;T
51Testing软件测试网:{$c+y:}%]Z$B!t
FxD
CVz0G$lM2g/]AM0注:7月13日写于msn共享空间