|
|
原文:http://changfakong.diandian.com/post/2012-02-13/15973956
4 u, _9 F/ q z t/ k" [. B5 W9 R9 F/ ~& p
请求方法是请求一定的Web页面的程序或用于特定的URL。可选用下列几种:1 m/ V1 ?( T( N! J" O
GET: 请求指定的页面信息,并返回实体主体。
5 y+ g0 i( ?- E" |8 S+ t$ i HEAD: 只请求页面的首部。" I% H" c% t9 d* g
POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。1 R f& S; q" ~% y4 T3 K
PUT: 从客户端向服务器传送的数据取代指定的文档的内容。/ q* f- Q8 b0 \. t: |/ ]( T
DELETE: 请求服务器删除指定的页面。8 S4 a( X+ W1 z
OPTIONS: 允许客户端查看服务器的性能。) A g1 p2 k7 u9 T5 T4 S# F
TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。
; a0 T8 }2 z" _, V PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。: w+ a. j2 P9 f( Q% C& E
MOVE: 请求服务器将指定的页面移至另一个网络地址。2 S5 p8 _& N3 X b4 T: t! m
COPY: 请求服务器将指定的页面拷贝至另一个网络地址。
. w7 A9 ~+ _# r l/ L LINK: 请求服务器建立链接关系。' r# l0 m( _) _
UNLINK: 断开链接关系。
. G2 l( V9 Z% I+ N WRAPPED: 允许客户端发送经过封装的请求。3 P2 e3 [- A$ c7 U" B& K o, u
Extension-mothed:在不改动协议的前提下,可增加另外的方法。 b1 G! V8 B" A* a+ q B5 f& s9 ]; v
当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:4 R2 R% _$ I7 h# X7 _, x% D/ R& B
① 客户方错误# ?9 U: J" W1 f9 Q+ G& h7 a. t
100 继续
, H- E Q# f5 z9 O/ |$ f 101 交换协议
$ Q2 e" M+ O4 ~0 Y- E② 成功 S& d8 q+ @* H( W
200 OK
0 z: i1 R* W* s+ W 201 已创建
. t5 @) q W9 z' l u1 h$ ~; k 202 接收
3 t& A% T% f' W! S: p 203 非认证信息
" S0 y- c6 b( S# l1 d 204 无内容: f" H$ z' @3 R1 E
205 重置内容
8 T0 D8 j$ I& X8 W8 Q8 z. z" g0 a 206 部分内容
9 n5 [) b& i% I; L# U/ \" d③ 重定向
" l9 J3 e# ~8 n 300 多路选择. s1 E$ q" i/ u) K+ N
301 永久转移
7 w W* R! A+ v5 N6 v, c* x: H 302 暂时转移
4 }; J+ ^( m4 y: `+ U' ~: M 303 参见其它- x; o& B' t$ S8 j
304 未修改(Not Modified)4 b1 J+ F; X& u: J
305 使用代理; `2 w( K; Z: x( ]
④ 客户方错误
9 e! I0 p0 ^; \! S7 @7 G9 g; q 400 错误请求(Bad Request)' G, u0 Q F) j- L0 M+ _& u
401 未认证
l# p6 y& T( m 402 需要付费) `& E6 c: F4 K2 W/ f: o2 C2 S
403 禁止(Forbidden)
3 G7 o+ R4 x8 T0 g7 K& K1 o 404 未找到(Not Found)
; ]! V) ~0 M7 i' B% H 405 方法不允许; K8 ~# M7 |- P2 B
406 不接受# i" H) b7 q t$ t8 d8 V3 g
407 需要代理认证
! U$ X; u5 l: U0 P" D# q7 j 408 请求超时* J$ e: m, d' A4 `
409 冲突0 A# u# j" U O* d) S3 B
410 失败
# b0 M, Z V. k 411 需要长度 _- a1 @' j: f" {- f
412 条件失败5 o& }8 V0 t/ N+ W, G) u( C. z
413 请求实体太大
$ d! Z" }8 z& a$ ` 414 请求URI太长" {; g! H$ O* Y8 E) T8 \" _
415 不支持媒体类型
/ O$ D/ q* d) g6 J⑤ 服务器错误
% V: b& [! [. W- y* z( @1 J 500 服务器内部错误1 K! b# B! Q& v( k! _" k
501 未实现(Not Implemented)
4 ~) q( h# v4 f# ]- ` 502 网关失败# T1 L) g2 w6 N+ Q& H; T/ T$ K
504 网关超时
$ Q9 [/ i& N2 h' x: b+ ]/ L# P 505 HTTP版本不支持
# A% D' ?% I; [8 y. g; F关于实体头部的内容还可以有:) y; x& C: A( v' {1 F2 T# w
Last Modified :请求文档的最近修改时间。
1 g+ B8 @) O- x$ S; J# xExpires :请求文档的过期时间。8 N* v! e7 P$ Q% Z& ?! X- z
Connect-length:文档数据的长度。
0 {2 y9 w$ c) T0 J, z* B7 d, QWWW-authenricate:通知客户端需要的认证信息。
2 _5 \' ^8 g* } z9 _Connect-encoding :说明有无使用压缩技术。
^! U( P3 O. D) O/ V8 b$ `Transfer-encoding :说明采用的编码变换类型。* b: z- I0 l- p9 A( y/ f! D% q7 k
标准Http协议支持六种请求方法,即:' s; O, |5 S: @! s! V3 F
0,GET8 q9 {; D9 T/ \3 l
1,HEAD
0 q- u; f) X0 X2 a- N 2,PUT
9 }; k% G `8 V- Z 3,DELETE
0 o* ?2 ]% X* ~ 4,POST, D( y ]8 [; c0 N$ M' [/ i: j* F
5,OPTIONS, X1 d* L* l; G; M
但其实我们大部分情况下只用到了GET和POST。如果想设计一个符合RESTful规范的web应用程序,则这六种方法都会用到。不过即使暂时不想涉及REST,了解这六种方法的本质仍然是很有作用的。大家将会发现,原来web也是很简洁明了的。下面依次说明这六种方法。
) ^$ h; y! L: k. o- G: a 0,GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
. c$ Y7 p! [- l 1,HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。
+ ?; h; ?/ I3 v1 I* q: g 2,PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。
* U6 N4 x8 t8 [ 3,DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。
2 y! f* N; m; z) s8 n" c 4,POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。 ]# E& {4 C/ [* S( i; \' U$ r, f
5,OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
" Q) N4 J' I; N6 Z7 g s7 p+ ~ 其实还有一个TRACE方法,不过这个基本上不会用到,这里就不介绍了。以上的六种方法,我们可以跟数据库的CRUD增删改查操作对应起来:" d9 P6 N- b$ G. N$ e) G; r
CREATE :PUT P" \2 C( [) C8 A! r5 ^1 Y
READ:GET
0 E+ H) ~; Z/ a6 W* g* m9 Z UPDATE:POST
4 B+ Q$ Z3 J1 B( Z1 ]% p DELETE:DELETE
! z) @4 N. g1 z. k1 a! L8 X8 J 这样一来就实现了HTTP和数据库操作(其实不光是数据库,任何数据如文件图表都是这样)的完美统一,这也是REST的精髓之一。
4 Z. h1 L q, N6 |- B
" @8 @2 M n$ B# @4 D |
|