|
原文:http://changfakong.diandian.com/post/2012-02-13/15973956. s3 o! S) q: C
! g* _2 F4 A) L/ F) \; d
请求方法是请求一定的Web页面的程序或用于特定的URL。可选用下列几种:6 [# p* L' a, H# C0 F. A$ p* [5 i
GET: 请求指定的页面信息,并返回实体主体。! A. x" e2 E! G. W7 d
HEAD: 只请求页面的首部。
7 ~! o: W7 o3 s* O: t0 [ POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。' S% _; Z, K1 B
PUT: 从客户端向服务器传送的数据取代指定的文档的内容。1 T0 `% x1 W5 a, B' w+ X) K
DELETE: 请求服务器删除指定的页面。
7 g8 d4 A6 c- n, t OPTIONS: 允许客户端查看服务器的性能。
o/ X5 c1 u% P( [# t# W8 c9 R TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。
. {9 ^" S$ I9 ]. t0 C PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
, D. e" O ]' f MOVE: 请求服务器将指定的页面移至另一个网络地址。
. k) |# U8 h9 o' ~' L! S+ }* y COPY: 请求服务器将指定的页面拷贝至另一个网络地址。7 |3 H3 e0 e( V( d( ~; c' ]
LINK: 请求服务器建立链接关系。
: T# i1 W+ k5 Y UNLINK: 断开链接关系。% f( ]/ b w* v% |! K- a9 d
WRAPPED: 允许客户端发送经过封装的请求。
4 H: r/ P! l8 Q, u$ l' Y9 F Extension-mothed:在不改动协议的前提下,可增加另外的方法。
7 V3 u: `1 |( K: w( _$ x当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:
2 L: T$ K# W; ?; ~+ T, R; ?① 客户方错误
% s3 g, w" f: {3 F0 N* D! z X' A8 i 100 继续& R$ X& T$ j# w2 x
101 交换协议
, Z5 Q3 M# f5 ^② 成功
, p) Q/ H! x' x3 J; N( N 200 OK; y% i4 {* I! S4 v
201 已创建! q7 g! {" w% ^
202 接收
! e4 A/ c$ ^+ H% o; C- f# F0 G B+ b0 ?) f 203 非认证信息
! P& T Q* e9 b" H 204 无内容2 g0 y+ v; B- W( T j( y0 n* m
205 重置内容
4 V$ R9 F" `' c* j6 \; } 206 部分内容
4 T4 S [* a+ ]2 S: Y- C③ 重定向3 q+ a& E/ y/ J
300 多路选择" `- q6 P5 H: o) S1 D, A1 k' F
301 永久转移; R( L# c; P* g- K8 Y( L, a4 l$ V
302 暂时转移) g7 }: V; L9 A) N9 t* n
303 参见其它
# ?! N( K+ L+ a2 K" h 304 未修改(Not Modified)/ c3 P- A6 r; |+ ~
305 使用代理/ z9 Q' N! Q9 J! ~7 I2 t* o2 x
④ 客户方错误
7 V2 {/ {! _, U+ \5 d. D 400 错误请求(Bad Request)4 Q" j# T9 B- [9 j t4 H
401 未认证7 W, G c# _9 e. E
402 需要付费& ~ x$ s8 J" x) n! }
403 禁止(Forbidden)
5 v/ J2 I6 u" Y! L$ z: o N 404 未找到(Not Found)
|8 }* ^% L) ]2 g: b0 V7 I 405 方法不允许) ~/ X0 n [( k0 a5 x6 ]& Q2 r
406 不接受
) e& M* o6 `6 x5 h 407 需要代理认证
% U* B _4 M* |& S 408 请求超时
# i L* p: ]' i& Q; E* U" v 409 冲突5 r7 c9 A! Y+ m( Y5 A
410 失败
# d5 \4 d n+ U; r9 {6 E( y 411 需要长度9 C* s# i' L4 z" e: \
412 条件失败! t# B* b M2 W/ N
413 请求实体太大
' y# y7 ~# L" b" O/ P 414 请求URI太长
c# `1 k5 q/ Y( d6 p( h4 b/ f 415 不支持媒体类型
W- P9 B5 ]( d⑤ 服务器错误
0 c8 w. D3 @" m+ | 500 服务器内部错误& [6 n5 V! ~+ C' |: y7 ?
501 未实现(Not Implemented)
4 R9 w9 s2 k4 G! y' Y- l 502 网关失败4 T5 ~8 `$ v% j' ]/ E
504 网关超时
4 `! ~+ R8 Z# _ b2 z ? 505 HTTP版本不支持
/ ]( q. D9 {# ?( Z$ p关于实体头部的内容还可以有:
/ J, y, m& F4 I8 [1 {" o" mLast Modified :请求文档的最近修改时间。
' w7 V2 Q( e; v& C9 u2 GExpires :请求文档的过期时间。
9 H2 O8 L4 ? K" |/ O% C4 s0 f. fConnect-length:文档数据的长度。* u6 P2 j8 _" i9 j- E5 D5 t% ^
WWW-authenricate:通知客户端需要的认证信息。- |. j' y) O) R: V% C0 }
Connect-encoding :说明有无使用压缩技术。0 M2 ^5 R" n! v( _" h
Transfer-encoding :说明采用的编码变换类型。
' I$ ]# v9 B ?9 }5 }+ w1 W) K标准Http协议支持六种请求方法,即:2 a$ |1 n# z5 S( f
0,GET- ]. s+ e: C) i2 U. I
1,HEAD+ ~, o7 o7 W! ]! w5 f. P
2,PUT
5 S% ?+ B) U* U+ \1 H% T& [; ]1 q 3,DELETE4 T# r, D! [# {/ |( B
4,POST& R2 M# a/ x/ q. N( n) i6 j
5,OPTIONS
# {) m$ Z! n l" {( J! I 但其实我们大部分情况下只用到了GET和POST。如果想设计一个符合RESTful规范的web应用程序,则这六种方法都会用到。不过即使暂时不想涉及REST,了解这六种方法的本质仍然是很有作用的。大家将会发现,原来web也是很简洁明了的。下面依次说明这六种方法。
. h8 r# X& g; }0 v 0,GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
6 O5 L: J, @. [$ H( t- p i 1,HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。/ C, ?* @! d2 R8 s" ^/ u8 Z
2,PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。4 E- D4 ?) M$ Q
3,DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。
u2 o/ L7 |" X ?, n2 Z N 4,POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。
$ K1 P( m+ j3 M9 K+ R0 t+ n; ~6 Y 5,OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。- o; Q6 R' i4 B0 H1 Z
其实还有一个TRACE方法,不过这个基本上不会用到,这里就不介绍了。以上的六种方法,我们可以跟数据库的CRUD增删改查操作对应起来:; n4 r" `# w/ \; i
CREATE :PUT
$ M# U! _& @$ O, m5 ~) b4 x0 [ READ:GET
7 Y# ~6 q1 p m6 V9 Q UPDATE:POST% Y. f6 o2 f' \+ E# x6 N
DELETE:DELETE, t/ D' \) G5 ?; S6 P9 U
这样一来就实现了HTTP和数据库操作(其实不光是数据库,任何数据如文件图表都是这样)的完美统一,这也是REST的精髓之一。- [* A3 P$ @" d# y4 ]/ u! f& j
8 v: C8 y q- l: D6 @8 u |
|