|
|
原文:http://changfakong.diandian.com/post/2012-02-13/15973956* R; [2 {1 g4 n- G% W" H! b' g* l
7 z( r$ {8 @# Q3 F, N7 S* c# f
请求方法是请求一定的Web页面的程序或用于特定的URL。可选用下列几种:
; h3 E/ E- y2 Z9 V j GET: 请求指定的页面信息,并返回实体主体。: Z5 X8 P" {3 M
HEAD: 只请求页面的首部。# S( V' }8 W- i% m* T
POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
( A7 X- u* u1 H+ A PUT: 从客户端向服务器传送的数据取代指定的文档的内容。6 v; h4 \1 D$ {! Z2 `
DELETE: 请求服务器删除指定的页面。# b: c D& j4 V# B7 h6 R
OPTIONS: 允许客户端查看服务器的性能。
* v/ G$ |- k& Q TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。# Z, N, P; @" M! S
PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。8 d0 m! \( h" O9 ~$ W, A
MOVE: 请求服务器将指定的页面移至另一个网络地址。) X# P( Z) s. i2 Z% a Z$ d* k
COPY: 请求服务器将指定的页面拷贝至另一个网络地址。
7 ?4 X4 j' r5 N3 v5 t/ u# g LINK: 请求服务器建立链接关系。
! a& W- C. Z7 q8 x$ X1 Q UNLINK: 断开链接关系。/ H2 p/ [& M5 J5 r B
WRAPPED: 允许客户端发送经过封装的请求。
5 z/ l8 T6 d5 O% {: y Extension-mothed:在不改动协议的前提下,可增加另外的方法。
1 M# t1 j( F" H v当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:
% ?, c' h4 s8 }/ g! O0 g① 客户方错误$ b5 W$ r4 b2 h, k) r* @
100 继续1 j) M4 \8 q2 e T3 P4 Z1 t
101 交换协议3 a3 R9 B. |, n P8 ]
② 成功# j3 m( f# k2 e) J( f8 W
200 OK
; y1 R9 s, S+ \ 201 已创建3 C: a1 Y s l
202 接收) l- l& q; i2 G2 r: \: V2 i
203 非认证信息" [$ A5 N, r$ d8 f. J9 e! M3 y
204 无内容
8 \, I! l2 Z! p- r a0 V 205 重置内容" C; ?/ L3 X i. b
206 部分内容
- e: o! h& E$ }: b3 h( n# h! k③ 重定向
; w( u/ s3 [. ~3 E 300 多路选择
, w+ Z9 ?: `6 ?# K. m0 z7 k) g 301 永久转移
9 i4 M' Z) s3 a! @! Q) } 302 暂时转移
& t* k5 \, d) x6 ^- a 303 参见其它7 b: P! S4 G! A8 m1 ^0 D; B! H, o
304 未修改(Not Modified): y* f6 S: G$ V
305 使用代理
B. a5 i; N/ ?9 _& ^6 U④ 客户方错误' L9 E% M X# ^
400 错误请求(Bad Request)
, C0 g' G' P# d 401 未认证; P* L2 J) j" F( d
402 需要付费) ~ c) C1 S4 O* G! T
403 禁止(Forbidden)) |- d5 j9 S' \0 |4 Y1 P4 J8 v5 ^$ W
404 未找到(Not Found)
8 m/ f5 Z% Q# G" q* s7 U 405 方法不允许
) o6 o& G& K% ~9 y$ k& j 406 不接受
7 A( v \& T& j3 z* [/ p6 n 407 需要代理认证
/ f) g. J r, G0 C) Q( D 408 请求超时1 K) Y' h p: j7 a% L
409 冲突
) I/ B. f9 S% a8 a( `, \ 410 失败) ~+ j# e# J/ b: D Y1 L, H% g
411 需要长度# Y, i+ a5 @2 X4 m- t! q
412 条件失败
4 d2 }! {) U# G" y; e7 P) y 413 请求实体太大
2 x! o0 ~( V2 f# d) ]+ q! L0 z8 k 414 请求URI太长. r1 [8 j! f0 @0 B. G
415 不支持媒体类型
$ C" C( N* F) m8 E/ r⑤ 服务器错误
3 C c. ]8 Z4 `; g& Y 500 服务器内部错误% X& G! }1 ~6 \$ S& t
501 未实现(Not Implemented)
. b- b2 L# X5 ]# [- ~/ g 502 网关失败0 e: ?1 J) q6 q$ j6 v
504 网关超时
5 y8 R5 Y$ Q: r! V 505 HTTP版本不支持
5 ?2 O2 u/ k `7 F7 H/ o" ^关于实体头部的内容还可以有:
; m( C8 F( c, LLast Modified :请求文档的最近修改时间。1 m' Z1 ~ B- U" n6 f: u) B
Expires :请求文档的过期时间。$ S( J% q, D& `; x
Connect-length:文档数据的长度。8 ]6 s: l/ g6 o/ R0 m1 `
WWW-authenricate:通知客户端需要的认证信息。
0 t1 V, O/ h/ ]) p3 QConnect-encoding :说明有无使用压缩技术。$ Z) ~0 |. L) ]# c2 b& P0 Z
Transfer-encoding :说明采用的编码变换类型。
3 c. f+ z4 |. L. q# q标准Http协议支持六种请求方法,即:
. H) j* D, V& J' t 0,GET3 H- D7 u! A% J) d
1,HEAD% Z( h$ z; @; n' b1 [; ^7 u) D. D! U
2,PUT
# s5 P$ c5 s+ o& F& e- I 3,DELETE
+ [) a, g2 `' p* Z' f, | 4,POST, S( u: f* R0 h+ a% h6 f! I% m) H
5,OPTIONS
! i, a; E; K/ D; C7 d% ]' ]. r 但其实我们大部分情况下只用到了GET和POST。如果想设计一个符合RESTful规范的web应用程序,则这六种方法都会用到。不过即使暂时不想涉及REST,了解这六种方法的本质仍然是很有作用的。大家将会发现,原来web也是很简洁明了的。下面依次说明这六种方法。* ?% i' v! F/ r1 m" _
0,GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。7 z' M' L; v$ a) g$ b9 R9 D" @
1,HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。
6 h$ N) E" u' e' V, `6 Y 2,PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。; {! _7 N# C& u' ?
3,DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。# ~7 c: j$ H# C0 P9 C3 g& ?! j
4,POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。
5 p# _, r( P5 c' n2 |: m 5,OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。* B! I/ v' Q8 @3 C
其实还有一个TRACE方法,不过这个基本上不会用到,这里就不介绍了。以上的六种方法,我们可以跟数据库的CRUD增删改查操作对应起来:
6 o8 l1 h5 c2 [2 I5 X! f CREATE :PUT n) C5 m: j [
READ:GET
|, R% @) Q# K0 ^0 y. _4 h UPDATE:POST
. V5 j. p. Z$ J9 x) S# i DELETE:DELETE: |1 F6 ?1 a; l7 `( ~* K) t
这样一来就实现了HTTP和数据库操作(其实不光是数据库,任何数据如文件图表都是这样)的完美统一,这也是REST的精髓之一。7 V% Z0 E: h. U
" y7 t+ C- q" F S I$ u1 f
|
|