|
|
原文:http://changfakong.diandian.com/post/2012-02-13/159739562 D- m- h& {9 k1 L
: U5 O. a3 x+ t. O, A( ~5 Z% I请求方法是请求一定的Web页面的程序或用于特定的URL。可选用下列几种:0 k6 c* r Q, k. F$ W4 @
GET: 请求指定的页面信息,并返回实体主体。/ F/ O+ \. B3 }0 z& c
HEAD: 只请求页面的首部。
0 q. g- b4 j7 E# v POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。' g& z$ A0 M& R( R
PUT: 从客户端向服务器传送的数据取代指定的文档的内容。, P s! s& m2 _' X E
DELETE: 请求服务器删除指定的页面。5 W8 N' y9 N. o/ n5 _7 v9 w$ \
OPTIONS: 允许客户端查看服务器的性能。2 u, F6 B6 Z8 ~
TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。3 a0 J8 H/ L; m% X* z3 t
PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。 ]( n# y8 a6 ~* y' m/ |# \$ x
MOVE: 请求服务器将指定的页面移至另一个网络地址。
& [" h, D- U+ P; y7 |5 X& J COPY: 请求服务器将指定的页面拷贝至另一个网络地址。
/ D* v- k- O$ @+ }" u LINK: 请求服务器建立链接关系。. c6 b* F" K8 U
UNLINK: 断开链接关系。
) `5 g! z% @! i0 l0 ~" B, L6 c WRAPPED: 允许客户端发送经过封装的请求。
% X2 D9 }8 A% \$ j. H Extension-mothed:在不改动协议的前提下,可增加另外的方法。
2 t' b# J; |8 `# c当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:
% q& i! u% v& ?' K/ H① 客户方错误2 ?) n, ^+ [) Z
100 继续6 L% Z; f+ u$ Q7 H7 M5 A7 Z
101 交换协议
d' i7 F- ^% C2 w6 L( p& q② 成功' d: U$ I. L1 J% N
200 OK
; v+ |/ o( X! D1 O 201 已创建; \' i) y; H# B# [$ e
202 接收
) X1 k, l0 R8 M4 c 203 非认证信息8 E$ Q! c9 M, L# M
204 无内容
. r: G; B4 { A; b 205 重置内容
" J5 S4 t' _7 c: e) B6 _- Z 206 部分内容
6 ] w! ]' v0 K8 p- ~* z$ e③ 重定向
7 h( Z! b5 v4 w6 h 300 多路选择, K- `) j: U. l' D
301 永久转移5 R/ l8 }; G' e R
302 暂时转移8 x" \6 _ }3 S3 L- \2 \1 x
303 参见其它
7 |2 f- H/ G- K8 F" F9 z 304 未修改(Not Modified)
5 s' u8 G) D& V4 D* ] 305 使用代理" H6 s; X/ N2 I8 b9 R
④ 客户方错误/ ^) w8 v9 U0 T9 K" q
400 错误请求(Bad Request)
% c. Z5 b% v6 H) h2 K( \/ e9 V 401 未认证& R8 c0 j z, K7 S* [+ N9 d
402 需要付费
8 U( g3 M. F. ^$ S5 q* ~2 H 403 禁止(Forbidden)+ i0 b; J' a/ E3 ?; J& O, n4 I
404 未找到(Not Found)
- D* f, E; L9 c2 E5 E( T! R) ^ 405 方法不允许
% a' M' l$ H- B 406 不接受' G3 L' A- A- \
407 需要代理认证1 ~& f3 \" V! S5 q2 ?
408 请求超时
8 d9 u* f' b6 ?( |. Z: t/ ] 409 冲突7 J+ |6 f6 a& @1 {
410 失败1 Z8 ]& S9 c0 O6 O
411 需要长度& u5 \- y0 E1 X/ m8 Q
412 条件失败) P' P9 w+ @! b* w5 M, P
413 请求实体太大0 |% @3 e; K( [* T5 k U, d8 ?
414 请求URI太长2 r, p! S/ J* ]
415 不支持媒体类型- O5 W: n3 |% [2 H0 F+ U
⑤ 服务器错误
" S% I+ x6 q7 I4 T b& ?% j. Q 500 服务器内部错误, l" ?2 r4 L; B# C6 z L* i/ V# p
501 未实现(Not Implemented)
! a4 m- G5 j: h1 L, Q- I' C 502 网关失败
- ?5 V* B6 f, g3 E c3 E 504 网关超时5 x% g5 R7 @. `# O( M
505 HTTP版本不支持* Q h$ V% P3 I) ?# p8 U e
关于实体头部的内容还可以有: G& v% v4 Q/ o) {7 D0 p
Last Modified :请求文档的最近修改时间。
. n" K w6 n& L2 k: sExpires :请求文档的过期时间。
: j Y/ z, T, h Y! y7 hConnect-length:文档数据的长度。
9 \4 k" @* ]% y3 k" vWWW-authenricate:通知客户端需要的认证信息。
' r# H H/ @; E$ {$ E( [Connect-encoding :说明有无使用压缩技术。
& @' e* A; f+ Y' @4 q( D. _Transfer-encoding :说明采用的编码变换类型。2 K( O; M+ I. v& ~6 s# v
标准Http协议支持六种请求方法,即:3 y) x5 S9 r1 w- F& z
0,GET9 O# n6 ? C$ A/ h/ D$ c
1,HEAD4 I$ ~/ o1 P$ `; }! F
2,PUT8 B7 I& G- L5 ]: [" W. B
3,DELETE
' B5 g3 ?2 v0 y @2 i0 X' v 4,POST2 S% a; D% C7 Z
5,OPTIONS+ t: S& N0 d Z: r+ i
但其实我们大部分情况下只用到了GET和POST。如果想设计一个符合RESTful规范的web应用程序,则这六种方法都会用到。不过即使暂时不想涉及REST,了解这六种方法的本质仍然是很有作用的。大家将会发现,原来web也是很简洁明了的。下面依次说明这六种方法。6 j' q$ k/ R; t3 p$ W
0,GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。8 x1 H( b, `, h! s( m+ q
1,HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。
' p+ F3 ` O/ f& S5 L6 o# L 2,PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。
4 e4 Z2 v! u/ P: v% y: } 3,DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。" x0 n: D6 S7 s4 P# b) U
4,POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。
% f2 d1 Q6 a# {0 Y( D" O 5,OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
' l5 @. r+ Y) ?6 u+ F$ e2 U 其实还有一个TRACE方法,不过这个基本上不会用到,这里就不介绍了。以上的六种方法,我们可以跟数据库的CRUD增删改查操作对应起来:
, T- b* f! m5 l$ J: D CREATE :PUT ~8 w, I, \0 q& x% o
READ:GET# @" E. n1 H# c- u. b3 d
UPDATE:POST& i3 l6 ?# b3 N7 O) L. E! x
DELETE:DELETE
+ L9 ~& q; G1 G* \6 R 这样一来就实现了HTTP和数据库操作(其实不光是数据库,任何数据如文件图表都是这样)的完美统一,这也是REST的精髓之一。
1 D' `0 ?: V$ R3 s
/ T3 A1 |2 S% f7 ?% w; B y |
|