|
|
原文:http://changfakong.diandian.com/post/2012-02-13/15973956# S J5 y* o* V5 z( g( S% |( |
/ n5 Q: b2 N% ~请求方法是请求一定的Web页面的程序或用于特定的URL。可选用下列几种:
5 I0 p+ e" j# W8 J, l- q% u4 o GET: 请求指定的页面信息,并返回实体主体。
+ I) d' }2 d, C9 `9 _2 }8 J HEAD: 只请求页面的首部。
l. M; ^6 t% m( Z POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。' _( g6 p# F6 {! o( F; r
PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
0 C+ f& O% s+ V( j* K% X DELETE: 请求服务器删除指定的页面。
! G4 G$ Y& }6 M* M0 b/ G7 S OPTIONS: 允许客户端查看服务器的性能。
( m1 B( N9 j% X, k. n1 K% _ TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。
& B" W0 ?9 y1 i: O' l- L PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
7 i4 x8 p: U& W$ y MOVE: 请求服务器将指定的页面移至另一个网络地址。
9 B. Z9 X4 g* M V COPY: 请求服务器将指定的页面拷贝至另一个网络地址。
D7 [" x, X4 j3 P: @1 C LINK: 请求服务器建立链接关系。; [9 [; K7 W( c6 r' l+ {2 y* d
UNLINK: 断开链接关系。
2 D1 v$ @& M/ _; }; a% T6 O WRAPPED: 允许客户端发送经过封装的请求。0 a- Q1 {4 o+ |* z1 D6 n$ Z
Extension-mothed:在不改动协议的前提下,可增加另外的方法。
: l: ]# }$ s6 P- H' w% U8 P当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:/ R4 S, C, u ~ f: d
① 客户方错误& R4 d( ~7 ?+ s# ?9 H% L: W- j' Z
100 继续
. H# c8 @, Y% u: C+ J) q 101 交换协议 \. e( ?5 r/ U+ Q5 V2 ~) ~
② 成功
! y0 H% _* z) L" X, R5 c. p% n 200 OK1 [" \6 r- J5 ?; ]# N
201 已创建: d) K h4 L( |2 n* r* f& _ _
202 接收
% b0 C- f5 O( y/ m1 ~3 ] 203 非认证信息
2 i9 y' ?' {/ S- |+ M$ A3 x 204 无内容
0 J+ [6 u# {+ z% T9 q6 W$ U 205 重置内容
! H E6 O# h3 n3 D1 f6 Q 206 部分内容
9 z# Q4 L! F4 A0 U# N# o! T7 X* \③ 重定向
5 B2 @" ?# c) m6 f3 W7 c4 {4 _ 300 多路选择
$ F z* X% ^( z; K. b 301 永久转移
" f5 u+ R+ d& {) |4 t. I9 }/ x 302 暂时转移$ j+ ], V: A; R; b. i3 Q. |- B8 u
303 参见其它) c: @, {% x( E3 e7 c2 u. U' p
304 未修改(Not Modified)
. m. G3 C6 F% {4 e4 h( t5 @ 305 使用代理
/ P' k. c* A |7 S5 {! G④ 客户方错误& I/ o$ w/ y) e- ^0 k7 x0 Z
400 错误请求(Bad Request)3 ^' M6 Z8 m4 t9 m1 X* p
401 未认证
: l8 m# C R' s! ?8 ~: i* ]/ s- _ 402 需要付费+ L0 d) l& |. Y3 }
403 禁止(Forbidden)$ y" S8 J% X1 `% U
404 未找到(Not Found)
+ c# [$ e8 @& |8 ~2 j 405 方法不允许) a- H+ l" ~) b
406 不接受
* t: }+ Y) O1 ^: [, b+ T- A 407 需要代理认证# K0 ]: t* c$ U. ?3 P2 X
408 请求超时/ g6 q; r9 t" G" E, p2 T7 i
409 冲突' X: x+ t4 F& A1 I4 J6 G
410 失败3 L2 _+ l* h/ L: U, }
411 需要长度8 f$ O! ]7 G. h8 l/ ?
412 条件失败
$ h5 a1 A+ A4 B7 ?! w9 r, m6 z" V 413 请求实体太大6 C: `0 q% Z' k; t; ^
414 请求URI太长# y E' q4 l. ]0 l0 s8 Y& ]
415 不支持媒体类型
5 J9 X% b2 l; A7 v⑤ 服务器错误
4 v9 ?0 s/ {7 v7 \ 500 服务器内部错误+ P" j8 s! p8 u
501 未实现(Not Implemented)
- C- H, k) w2 n! b r 502 网关失败
( I E. l- p' j: I4 I 504 网关超时! J- |8 w* X4 y/ {- r
505 HTTP版本不支持
. Q( I" I/ }! d) i4 h% l) c7 @关于实体头部的内容还可以有:
# \3 D# n9 s: cLast Modified :请求文档的最近修改时间。0 W# m2 [# p- V6 F" p7 Q
Expires :请求文档的过期时间。
, p& ^' n; {, J3 | F) JConnect-length:文档数据的长度。+ Z- [8 u7 C: b( [/ t7 a2 g! D
WWW-authenricate:通知客户端需要的认证信息。
0 h0 _4 `) x) U; A L8 dConnect-encoding :说明有无使用压缩技术。3 _5 w4 T4 I" e ^$ l7 J
Transfer-encoding :说明采用的编码变换类型。
. @& i) T9 U! e: H; Y& ^标准Http协议支持六种请求方法,即:
1 U2 G/ O/ b8 B) ^* ~/ ^ 0,GET
+ g/ K; f5 R( n0 e& x4 f& B 1,HEAD
. i1 H5 q+ F, ~' ^8 N/ ^ 2,PUT$ @. {/ c5 p, l
3,DELETE
) t1 u# p$ O! P; A 4,POST0 }" h* T/ O8 S/ `# H
5,OPTIONS- {* @5 ^0 D- E) P1 {
但其实我们大部分情况下只用到了GET和POST。如果想设计一个符合RESTful规范的web应用程序,则这六种方法都会用到。不过即使暂时不想涉及REST,了解这六种方法的本质仍然是很有作用的。大家将会发现,原来web也是很简洁明了的。下面依次说明这六种方法。
% q# b, P! f2 Y7 D- g* k6 A 0,GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
' v1 K6 T4 z7 ^/ O$ P 1,HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。
. j: B; p, G: ^ 2,PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。
( Z5 z8 I, [- M0 X( V 3,DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。' S# U+ e( F% x/ n. J
4,POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。9 x: {" O1 Z% ^
5,OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
( g- e" p- s5 H& ^ 其实还有一个TRACE方法,不过这个基本上不会用到,这里就不介绍了。以上的六种方法,我们可以跟数据库的CRUD增删改查操作对应起来:
* g9 m' f% V' T* ?6 f9 K CREATE :PUT/ N% L$ x( h K( d; d: g
READ:GET/ y3 {0 a) F: O
UPDATE:POST
% n/ ^& r) i( a4 d DELETE:DELETE
) z6 U# q" _ G) N9 I 这样一来就实现了HTTP和数据库操作(其实不光是数据库,任何数据如文件图表都是这样)的完美统一,这也是REST的精髓之一。
% P. t( v. p$ f( L3 F" y; f. N* ]- a( Y9 z7 m. e& B
|
|