|
|
原文:http://changfakong.diandian.com/post/2012-02-13/15973956
0 s) \6 c% O3 y) E' M5 u
( U) ^# B: ?' E/ G请求方法是请求一定的Web页面的程序或用于特定的URL。可选用下列几种:6 g5 o7 t. g' I7 s, A
GET: 请求指定的页面信息,并返回实体主体。3 \+ c) f% J: M: }4 h2 Y8 n
HEAD: 只请求页面的首部。0 l" b1 A( O$ Z* M9 p% P
POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
4 [# X6 I- C6 n, d* X: u( t PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
# ]7 \$ B$ _! f- H% F3 T DELETE: 请求服务器删除指定的页面。
5 E! E a1 f" B OPTIONS: 允许客户端查看服务器的性能。
/ B+ t; @" n# ^ TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。& F. m/ {" k' C
PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
; z. }3 x5 ^' v( } MOVE: 请求服务器将指定的页面移至另一个网络地址。
$ |* t$ q2 S) E F; ]6 n1 V& D: b COPY: 请求服务器将指定的页面拷贝至另一个网络地址。5 h* D: n* X# _8 p3 m% }
LINK: 请求服务器建立链接关系。: C Z2 ~8 F& e9 y% H# C" H: K/ O
UNLINK: 断开链接关系。
3 a! l% {0 ] w9 L* S" Z7 C/ A9 x WRAPPED: 允许客户端发送经过封装的请求。3 a J& i: u5 \% J
Extension-mothed:在不改动协议的前提下,可增加另外的方法。
$ H1 a$ E* \% C% |0 Q& l5 J2 G当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:+ R: ?( a5 O; j# Y" l6 t
① 客户方错误
/ W4 u, k, y3 u* G: e. ^3 W 100 继续
; }! h" l: {$ i' ~3 b0 b4 {5 h 101 交换协议
) c4 J! W2 B. D9 i9 V& |② 成功$ p/ ]8 m& G! j3 K5 y5 j$ J& A b* y5 T
200 OK
8 h& U# \& |2 m3 Z! g 201 已创建
* [# {9 A3 c" N; J 202 接收
+ r3 \ v7 d. c+ {, I5 P 203 非认证信息+ \: i- s V- v* j2 _0 G
204 无内容# U3 ^5 I0 B& `4 x
205 重置内容5 K7 _5 l$ P' s. \8 f7 q3 D& ]
206 部分内容/ h. o* t0 U# |3 _: x
③ 重定向
r/ ~9 ^" b( l: K5 E' B9 d. } 300 多路选择
* n1 U9 T5 Y7 D. o1 U8 | 301 永久转移6 G. q' D+ w1 L- L9 {3 A
302 暂时转移8 B4 K9 l+ T* N. h; q
303 参见其它4 R/ z: R _2 a9 ~# ~$ e1 b' T
304 未修改(Not Modified)- ^1 O! A2 F" [4 v" Z# c& k
305 使用代理
+ z* m& D }0 [$ B- d! N④ 客户方错误3 p0 F/ [ K4 f7 q |
400 错误请求(Bad Request)7 [% n/ }# \+ R) \, p; P3 e
401 未认证5 z! O) @* I' s, {+ H
402 需要付费
9 F' C+ ~5 e& k 403 禁止(Forbidden)
2 X5 K- S, n% T. T+ M3 a3 w 404 未找到(Not Found)
$ |3 R" i/ ^6 S 405 方法不允许
7 B4 O( S3 N: U' }3 z. A: N 406 不接受
4 K5 [8 `( o2 P' R 407 需要代理认证
8 I6 h% h& E; ]2 S5 ] 408 请求超时
9 ^/ W; u% D; f 409 冲突
* v8 k. @" c2 U5 `8 I# u2 B 410 失败& |# C" P6 H4 z- c: f% q5 s7 k
411 需要长度. J9 k0 y* v6 C! a! u* R8 M
412 条件失败
0 P' L, w% E7 v) v! j$ s6 l 413 请求实体太大+ i& ?1 Q) C; ~" {- u- \
414 请求URI太长
5 R5 z2 C n: P% @2 O# D& s 415 不支持媒体类型
; H6 |) I, [8 E⑤ 服务器错误
! N$ ^) ^6 y; K- z* A 500 服务器内部错误
4 o3 m/ K5 O0 w) \8 f 501 未实现(Not Implemented)- r7 e- p; w+ e4 L) l
502 网关失败+ r8 }+ Z' G9 l
504 网关超时
- J5 C) ^2 C4 c( r3 l 505 HTTP版本不支持* M# Y- N( e5 X' Q r) |' }
关于实体头部的内容还可以有:
9 h. j. {1 [; |8 C) sLast Modified :请求文档的最近修改时间。( R2 i. G) j! r6 N8 g: }
Expires :请求文档的过期时间。 q0 x- x: h5 O
Connect-length:文档数据的长度。
* [+ Y4 P. L E/ \WWW-authenricate:通知客户端需要的认证信息。
5 G- e `2 p% D! z" v+ aConnect-encoding :说明有无使用压缩技术。9 R+ a' T7 v0 u( I2 H6 c
Transfer-encoding :说明采用的编码变换类型。
: Y* }+ w! R: c$ q0 E标准Http协议支持六种请求方法,即:
6 N+ {# _& d3 X5 [6 @9 l 0,GET' _2 Q* v. Q( a9 l1 c9 i
1,HEAD# {8 M5 X* r+ \7 c2 R- x! i0 }
2,PUT
v1 F. ~3 }+ y8 V7 K! j 3,DELETE
: x- C) \5 _. }0 N- p& m 4,POST
6 [) W" D, H, ~9 \4 ^ 5,OPTIONS' y% t; X4 O9 r9 P' e5 v% h: d @
但其实我们大部分情况下只用到了GET和POST。如果想设计一个符合RESTful规范的web应用程序,则这六种方法都会用到。不过即使暂时不想涉及REST,了解这六种方法的本质仍然是很有作用的。大家将会发现,原来web也是很简洁明了的。下面依次说明这六种方法。
& u" O$ ]( @* h 0,GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。5 i3 O$ K z% e& F1 b+ t
1,HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。9 { ^2 D5 x7 N2 f0 y
2,PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。/ g3 a5 R# v$ | W
3,DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。
, n9 z0 W2 Z: c* ` 4,POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。! q9 e+ `5 A5 D! x! h
5,OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
% W. v0 N& s; R0 ], J2 O0 z+ V 其实还有一个TRACE方法,不过这个基本上不会用到,这里就不介绍了。以上的六种方法,我们可以跟数据库的CRUD增删改查操作对应起来:
3 o2 }- Y" \( u: Y; @0 K; w CREATE :PUT
; h# {# n. M8 O) s$ |" o, I4 j+ \ READ:GET
2 V- [7 {9 b- K- x% }9 h UPDATE:POST( Z+ l: P; X# E% m/ K+ f# b
DELETE:DELETE) L. s( q ?( B7 M2 k5 \7 L$ p3 L
这样一来就实现了HTTP和数据库操作(其实不光是数据库,任何数据如文件图表都是这样)的完美统一,这也是REST的精髓之一。' y& C6 }! M& Z5 N
1 X3 L! F, E B9 Q# W- m; L |
|