|
|
原文:http://changfakong.diandian.com/post/2012-02-13/15973956
- c2 I* r5 s' U( p3 U- ]
9 Y$ x$ c/ Q" O6 k请求方法是请求一定的Web页面的程序或用于特定的URL。可选用下列几种:
+ m- W& |+ k0 ~ GET: 请求指定的页面信息,并返回实体主体。2 e8 V9 m0 V& T! F
HEAD: 只请求页面的首部。0 N4 w, O& |" D( ^6 u
POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
' Y" k t0 s5 J: V PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
0 ~5 R" J" H5 y' S+ k0 O DELETE: 请求服务器删除指定的页面。
& ~# Q8 n! j# f+ P; g* M9 e OPTIONS: 允许客户端查看服务器的性能。
) c5 I3 ^9 b; {$ Q9 h& h TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。
~/ [' \4 f" g5 q _; y PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。& j: m& x' m( l! E, x# c7 O
MOVE: 请求服务器将指定的页面移至另一个网络地址。: Q, b7 n# C2 C' ^- ~* Z F
COPY: 请求服务器将指定的页面拷贝至另一个网络地址。; ?" j6 Z, F7 U& L+ p, f7 r
LINK: 请求服务器建立链接关系。6 M/ @$ h( s& a+ u# T9 X2 s
UNLINK: 断开链接关系。, a) Z% ]9 W: `6 y( X
WRAPPED: 允许客户端发送经过封装的请求。: e8 I6 \- a; L1 r+ d3 d
Extension-mothed:在不改动协议的前提下,可增加另外的方法。 q" n8 l( C% P% i& K8 B2 ^/ x
当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:6 _. A& [, n. i8 G9 O
① 客户方错误, q- {' {3 U0 ~5 u- v1 N
100 继续! g2 x! H0 }4 D2 G9 k! v# l
101 交换协议
& @: b, ~& O: b& J. f② 成功
# e7 C% `! V5 ^& ~+ Y7 R0 e3 k 200 OK/ d' l3 J' ~" t0 T3 }& { j
201 已创建
5 r0 s: M: R6 C/ \7 {1 i* s u 202 接收
# L+ J! V1 K; G, [5 N 203 非认证信息" t" T* q/ J) J, }9 g2 ^% r
204 无内容1 U) o" n5 o' F9 _4 o
205 重置内容
* p1 b" r8 l3 S, `$ L! L8 e 206 部分内容3 G: v$ S9 O' p m) F' C% }0 t
③ 重定向
v, V. m- \ v) I% a 300 多路选择/ _" B O W8 k' B; B
301 永久转移
' _# T5 Z0 e0 P 302 暂时转移
* ^5 I3 E, U6 l: B1 { 303 参见其它
/ q( i2 g5 K/ q4 y. v 304 未修改(Not Modified)9 L6 |/ j. p+ n+ l$ g$ |' i" T
305 使用代理- r' Y7 I) D+ @- _
④ 客户方错误9 v* \( l! R3 o- O% A5 R) o% n
400 错误请求(Bad Request)
$ y( P4 X9 r7 C* l$ W8 t 401 未认证 O) w' j' N# x7 m# c
402 需要付费
* H5 W M* }* T, k, n& b+ {+ w4 | 403 禁止(Forbidden)
# x3 M" q, `# M) `9 T; k 404 未找到(Not Found)
) X+ E: `/ O; k; t/ E 405 方法不允许
" \1 |3 N1 F0 k) h 406 不接受- y" A3 c" F. _" V& q
407 需要代理认证
! y, L1 V8 m! y, ^; b" O 408 请求超时' E( L6 p" [% |; j3 i0 x$ W6 @
409 冲突 u1 @( g7 F- J2 }
410 失败
+ X* @: d( B+ ?, O# X 411 需要长度
/ f. _+ G5 f6 ~) U: O4 A7 k 412 条件失败. S. D& O2 ] _) M* e- @
413 请求实体太大2 w1 t3 S; N1 ?/ c- h! N
414 请求URI太长
- T% a' r; ]- Y9 n 415 不支持媒体类型
) m m# Q$ ]; v% M& N: A⑤ 服务器错误' V: d2 ~$ ?, f6 _
500 服务器内部错误
: v* _9 ] t7 G H 501 未实现(Not Implemented)
W* R+ Q9 n" x7 r, J# N 502 网关失败
0 H5 j0 O' n3 S5 ^( S6 M2 ]4 p 504 网关超时
/ J8 V$ y7 N9 q/ ~ 505 HTTP版本不支持: R1 y9 h; ^" ?1 y# t
关于实体头部的内容还可以有:0 s* i6 U: [4 Z& w( G
Last Modified :请求文档的最近修改时间。
1 Q3 A5 _0 ]; u7 zExpires :请求文档的过期时间。( t* q# D* |7 g9 g
Connect-length:文档数据的长度。
, y" Z+ F X; G! T& LWWW-authenricate:通知客户端需要的认证信息。
; ^) U1 X6 M% Y; S6 B( G6 eConnect-encoding :说明有无使用压缩技术。
' {1 K# C! S# Y% mTransfer-encoding :说明采用的编码变换类型。6 e6 u7 f, `4 I) V/ p
标准Http协议支持六种请求方法,即:
) p6 B0 Y$ r( S) c/ e5 Y6 J+ S2 w- v 0,GET
! L2 L. x6 A0 N5 c# Q% _ 1,HEAD. O8 x+ [- R$ B) F! q
2,PUT
T1 m! v U" G' x. ?4 [8 L/ Z 3,DELETE& v8 c& C* f& w; R2 a% P/ J
4,POST9 j* }0 c/ k0 G( }2 q* ~
5,OPTIONS
" E6 ]' U/ k+ S7 e4 q0 } 但其实我们大部分情况下只用到了GET和POST。如果想设计一个符合RESTful规范的web应用程序,则这六种方法都会用到。不过即使暂时不想涉及REST,了解这六种方法的本质仍然是很有作用的。大家将会发现,原来web也是很简洁明了的。下面依次说明这六种方法。
, h4 d% b2 T2 n0 m# c 0,GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
, Z g* N$ j7 Q- `) @$ M 1,HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。
% N. t2 ?' D2 Y8 `3 F/ Q* ` 2,PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。
1 W+ f7 c0 ^0 z: y2 N7 g1 d0 r2 g 3,DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。
( I+ v3 E& Q. ]0 d5 t( v 4,POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。" n e' A0 D8 | Z& e9 ]
5,OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
1 C$ E$ M+ Y L 其实还有一个TRACE方法,不过这个基本上不会用到,这里就不介绍了。以上的六种方法,我们可以跟数据库的CRUD增删改查操作对应起来:8 d& ]" o! c: x8 n8 Q2 x1 j J
CREATE :PUT
' ?4 Q7 P J5 f( H; n, [" I) @ READ:GET( H, X6 c8 H) I N$ I5 l
UPDATE:POST
7 K, h* L, f" U& {" ]& t' J DELETE:DELETE
5 k9 A! |4 T4 V: l 这样一来就实现了HTTP和数据库操作(其实不光是数据库,任何数据如文件图表都是这样)的完美统一,这也是REST的精髓之一。
) E2 D, O4 {0 s* r! _' [
1 V: N& @( m9 ]( `2 m6 W |
|