|
原文:http://changfakong.diandian.com/post/2012-02-13/15973956
) U9 S4 S* Q7 Q4 l# g& I9 X+ S: N0 I; U' H* {* @7 j
请求方法是请求一定的Web页面的程序或用于特定的URL。可选用下列几种:1 m2 V: b) W6 X# z: N& v
GET: 请求指定的页面信息,并返回实体主体。3 T2 a. M( S7 n' @
HEAD: 只请求页面的首部。( M1 u+ n# t: V1 g# i( U% Y; |
POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。% i5 B! e8 O& E4 g9 Z! o& N" `
PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
8 O# O: V1 F2 G# Z DELETE: 请求服务器删除指定的页面。
' o0 c% t' N! y- K' k" g9 ~# [ OPTIONS: 允许客户端查看服务器的性能。
9 ?0 \) \# H4 h. F TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。/ m9 s3 A0 G; d
PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。5 U) w8 C4 G* e/ X x* _
MOVE: 请求服务器将指定的页面移至另一个网络地址。
3 K( W; m' v$ ~8 M COPY: 请求服务器将指定的页面拷贝至另一个网络地址。$ q9 w8 D0 U- [. ?% s$ R; t) @
LINK: 请求服务器建立链接关系。# _( V0 G5 m/ L2 Z5 B5 K2 M+ x
UNLINK: 断开链接关系。& t; a$ \3 ]( \" K9 Y: p! W
WRAPPED: 允许客户端发送经过封装的请求。
3 A9 V3 q$ L$ A: S" t0 T Extension-mothed:在不改动协议的前提下,可增加另外的方法。0 v: g, M% l1 E2 b4 W
当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:
9 d4 I$ K P( L' U① 客户方错误
R: }- }* K7 ]% ] 100 继续
: |5 t8 f, \" c; A3 B& l 101 交换协议% ~6 t- g7 j' D R
② 成功
& U: ~3 l% Y- l# {+ \5 u 200 OK
_- g, d* {( _ 201 已创建
. f& K/ V5 I5 p 202 接收
$ B/ u: r. M( H& _+ [9 S 203 非认证信息
- E6 H: b6 q! H 204 无内容4 J- s' d" X$ W/ w0 t$ u
205 重置内容
2 w. B* `& w- A" b' H 206 部分内容
+ _% [) e3 e; ?+ R+ F' x0 K③ 重定向
; y) \+ a8 V/ Y8 d9 g, f* M 300 多路选择2 D- k4 y" K1 U+ D& Q
301 永久转移% U, u; j: @: C; D5 I- K. m
302 暂时转移
% e' D) g5 e3 `. o% ~+ ^) R 303 参见其它# G7 X/ A. i! @
304 未修改(Not Modified)
4 g2 p/ I: x! U- Y 305 使用代理
# V. g) J% ?7 a) Z* n④ 客户方错误' n0 G5 _ L a9 ^, c" [' f
400 错误请求(Bad Request)
: [- T) B6 x* p 401 未认证
6 C2 L$ X$ y/ I7 A$ u o0 w 402 需要付费
5 @7 L" H* I ~: W d* B 403 禁止(Forbidden)
+ j, e4 z1 X8 V' m6 v3 j 404 未找到(Not Found)4 n! `& v ]; k: R: `; g" S1 ]3 _0 P
405 方法不允许
: _! u. f! x2 @" U 406 不接受7 u6 q. { j! @' C, r$ H
407 需要代理认证
- k) }. F+ Z8 O7 f5 U 408 请求超时. M7 X7 ^7 a$ x) I% J1 S
409 冲突
4 P+ W2 C; x& ^* N2 W( d2 w 410 失败" e- ^( @4 `2 R
411 需要长度
& n* a7 g/ ^' S 412 条件失败
; h% i$ a' ~6 X2 v 413 请求实体太大
7 g k* g5 E/ T 414 请求URI太长
8 J+ {6 Q) p! F. p. L |# U 415 不支持媒体类型
' e, [" l$ n5 w3 p" _9 Y⑤ 服务器错误0 r) u) O2 P/ t* r5 Z
500 服务器内部错误- q6 C- Q) R% z9 j- V4 N7 q
501 未实现(Not Implemented)
/ O R4 V% Z6 r" o/ q 502 网关失败
: B4 V7 g( H1 F, m0 C" F 504 网关超时
' D; ~5 n6 I1 J9 y5 d; f 505 HTTP版本不支持
$ | m( M( v2 J! q关于实体头部的内容还可以有:
, U9 O( h: F6 CLast Modified :请求文档的最近修改时间。& `" U* U/ S- ]( q
Expires :请求文档的过期时间。
& ~+ ]. C' s8 s f3 x* W: y, @- RConnect-length:文档数据的长度。3 ^5 B ^4 W: z; e( }( L/ m
WWW-authenricate:通知客户端需要的认证信息。
8 f5 S- i& P+ ^$ h8 E4 Y" G6 R8 lConnect-encoding :说明有无使用压缩技术。
) ^3 Q! ~& R. T0 KTransfer-encoding :说明采用的编码变换类型。
e) m* M" h+ K( E5 ?0 s标准Http协议支持六种请求方法,即:
K- o* f. a) X+ C8 l e 0,GET% [; F8 u8 a5 c% T
1,HEAD
. L6 ]' t9 d9 M2 f, E 2,PUT
9 Z% Y, J7 \' ]% [# P9 z! o. N1 e" H 3,DELETE
% v j% `( r; E4 n2 Z3 \ 4,POST1 H& t/ _2 X4 [% ]/ f* e
5,OPTIONS
w9 C' y* z# T$ R. Q M 但其实我们大部分情况下只用到了GET和POST。如果想设计一个符合RESTful规范的web应用程序,则这六种方法都会用到。不过即使暂时不想涉及REST,了解这六种方法的本质仍然是很有作用的。大家将会发现,原来web也是很简洁明了的。下面依次说明这六种方法。5 f0 a8 Y9 h$ t8 J6 \+ ~
0,GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
; Y" E- o4 b( I4 x; z8 S 1,HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。
4 }4 Y: F: c0 V$ L0 X 2,PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。/ T5 t+ ~7 ]0 i# x+ ]' |
3,DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。4 i& ~# [1 n4 C; y9 f( \( O' s f
4,POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。
1 h) @# D. b) Z 5,OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
1 f+ r/ J" N4 \0 C$ ~ 其实还有一个TRACE方法,不过这个基本上不会用到,这里就不介绍了。以上的六种方法,我们可以跟数据库的CRUD增删改查操作对应起来:. V4 p( K# V9 [. A, o) x# z
CREATE :PUT% d0 E. {- C" n$ o
READ:GET
) N) R2 `2 ^, B" `* U: k" }; R" z! S" a5 q UPDATE:POST( w' p4 x, w: U8 y# m7 g
DELETE:DELETE+ {7 f) P7 j$ J$ R5 V
这样一来就实现了HTTP和数据库操作(其实不光是数据库,任何数据如文件图表都是这样)的完美统一,这也是REST的精髓之一。& A; A* o; P1 A! l8 _* t
0 m/ d" S; C! N5 C- c. z! s
|
|