|
|
原文:http://changfakong.diandian.com/post/2012-02-13/15973956
- P' I' Q0 A# W( n1 W- ?! B7 {
4 |5 b5 e. m) V- ?, G请求方法是请求一定的Web页面的程序或用于特定的URL。可选用下列几种:
4 ]% } r8 }3 N& u( ~; Q GET: 请求指定的页面信息,并返回实体主体。
* X% w* K/ ~9 ] ? HEAD: 只请求页面的首部。
1 ?" Q4 M; a! K) L% o' | POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
3 \0 j7 C% R; ]5 c. d; | m PUT: 从客户端向服务器传送的数据取代指定的文档的内容。& @4 T% f0 C& y0 k
DELETE: 请求服务器删除指定的页面。
9 M* z+ E6 E$ N OPTIONS: 允许客户端查看服务器的性能。
0 A# m u; _$ ]2 B6 g TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。) e* ~1 k1 b+ D
PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
# O- Y8 r! B- }4 m% L) A6 t MOVE: 请求服务器将指定的页面移至另一个网络地址。
1 B( o9 o( Z k COPY: 请求服务器将指定的页面拷贝至另一个网络地址。' }# B# Y6 }2 W5 D
LINK: 请求服务器建立链接关系。1 N% X o- ^7 d) j* A* V. F
UNLINK: 断开链接关系。1 E1 M; I3 h! \* h$ [
WRAPPED: 允许客户端发送经过封装的请求。
& E! _% H. ?2 ` z Extension-mothed:在不改动协议的前提下,可增加另外的方法。
9 k4 V: |, x2 q% R# A9 |8 A5 o当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:
4 a. k% ^7 r" R4 N C: o# i0 J① 客户方错误
6 W$ U2 a# [" a7 l% _; y 100 继续& m9 B' o# V* \2 r: p
101 交换协议( Q& j7 T5 H$ I3 L% Y
② 成功" H! H+ w) f$ s5 \6 V3 z3 \& z
200 OK( h6 y; m3 S; ?" w0 \& w
201 已创建
' A' q Q8 F7 s; {; t: n8 q( a: B 202 接收
0 U* V6 s* y( ~, E7 ~ 203 非认证信息
' _6 t( Q2 o0 H# J2 [ 204 无内容
o' n# O/ Y$ e8 Y9 b1 L. ~& I 205 重置内容$ @- Y5 N- c) V1 g( W1 d
206 部分内容
4 s. q+ |" g4 i: [# a③ 重定向
`9 R+ R3 Q! P7 |; D 300 多路选择. q0 m% h( K, W) w
301 永久转移3 F6 Q1 l& h# r4 ?9 R
302 暂时转移
, W) m4 n; Z% o 303 参见其它
; l9 C. t& l4 n" {! H) ?; i) p# \ 304 未修改(Not Modified)
/ E F0 ~+ N: ~8 H, j 305 使用代理
! X: g/ I- Y2 N" u④ 客户方错误
0 n: z5 D* r5 a) C. f7 t9 [# }4 k( P 400 错误请求(Bad Request)
4 ^8 C* t5 ?( m/ R6 M: j5 Q) G 401 未认证 N4 ?( w r' l9 Z- u
402 需要付费
' q/ L3 C' y& ?: F! E* V$ ] g& ^1 W 403 禁止(Forbidden)0 S$ ~$ o$ v: p2 z: _0 `5 R
404 未找到(Not Found)8 H# K; q4 C0 l$ U3 i$ F/ C
405 方法不允许
9 m, z: ?7 [2 C% A \! B 406 不接受+ A; J: I8 F2 l0 w! W* G R1 _4 T2 L* @
407 需要代理认证# A( C$ ~2 }! g. v7 _+ T5 j1 i
408 请求超时1 q D# c3 y' C* f
409 冲突
/ q4 H4 F, e/ r* l, w( @* f 410 失败
% f4 ? R4 a$ |$ z 411 需要长度
. ?% ]/ i6 d$ O$ G Z4 w4 s 412 条件失败
6 {0 X @% _* s" m/ T 413 请求实体太大
# ?: Z) Q+ ~ K8 O5 s 414 请求URI太长, x- ?$ X$ w1 i
415 不支持媒体类型3 [) K4 _/ r$ \' I
⑤ 服务器错误/ z* Q) Y& ^6 C) r7 @
500 服务器内部错误
# f0 c |/ r9 A2 @0 m9 c2 ]+ n8 F 501 未实现(Not Implemented)
, B& {1 ^& P4 u% w/ o 502 网关失败
L; H2 K [, l/ G3 [+ t7 h 504 网关超时( t' k0 L4 U" S: @( y' l# O
505 HTTP版本不支持
- H, A: ^/ z; D% Z/ q S关于实体头部的内容还可以有:
" k- o0 [& b2 N& | h* ]1 iLast Modified :请求文档的最近修改时间。
1 q% P7 ^4 e( e: uExpires :请求文档的过期时间。
8 [8 t3 w+ q. b, g5 \Connect-length:文档数据的长度。/ |; O/ j9 i' r L; U
WWW-authenricate:通知客户端需要的认证信息。
) A8 C! p1 U! y7 XConnect-encoding :说明有无使用压缩技术。: M E2 S( R% K2 u3 z
Transfer-encoding :说明采用的编码变换类型。
9 [& c I4 ?, b标准Http协议支持六种请求方法,即:
( v# ]3 g/ r5 g6 M v8 I' a2 } 0,GET$ ]7 w" V2 ^# R
1,HEAD, t/ z, ?8 u* ^3 `- f
2,PUT
6 A+ f) C) {/ ?- u# r& y 3,DELETE
5 e" a( k$ h7 ]4 s: O4 N( c/ S 4,POST3 X# y6 P1 N* U
5,OPTIONS7 H/ f8 ^7 ?1 c: x* i
但其实我们大部分情况下只用到了GET和POST。如果想设计一个符合RESTful规范的web应用程序,则这六种方法都会用到。不过即使暂时不想涉及REST,了解这六种方法的本质仍然是很有作用的。大家将会发现,原来web也是很简洁明了的。下面依次说明这六种方法。
- r x# }8 t5 h/ e& G0 l; } 0,GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。: g' F4 | c/ k9 Q
1,HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。- b: m: \8 {$ j9 ~" z) y
2,PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。1 S h. q7 Y9 F2 {6 B
3,DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。
& X& i+ r2 l! p6 m; J0 U# V 4,POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。8 [4 B6 M% f* I
5,OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。2 ?2 O# P7 v1 }
其实还有一个TRACE方法,不过这个基本上不会用到,这里就不介绍了。以上的六种方法,我们可以跟数据库的CRUD增删改查操作对应起来:1 P; v0 I, i9 O: Q# a
CREATE :PUT5 [; C! v% D Y [4 h) ]
READ:GET
+ [' m% I0 U' p" o6 ~ UPDATE:POST: c: \- W) \! C4 U) d. f# ^
DELETE:DELETE
$ [& P( C0 L5 F$ K6 n3 { 这样一来就实现了HTTP和数据库操作(其实不光是数据库,任何数据如文件图表都是这样)的完美统一,这也是REST的精髓之一。
2 }( J, X! X; j5 @% y* D, k. E0 f! t
|
|