找回密码
 注册
搜索
查看: 2792|回复: 0

HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误

[复制链接]
发表于 2012-6-11 16:24:20 | 显示全部楼层 |阅读模式
原文:http://changfakong.diandian.com/post/2012-02-13/15973956  R. |$ v6 ~- {
# T+ m+ g+ v0 s1 q$ w
请求方法是请求一定的Web页面的程序或用于特定的URL。可选用下列几种:
# v+ \" ]- e; H6 n5 X0 {0 M) C$ F GET: 请求指定的页面信息,并返回实体主体。
9 w$ \/ C6 c% _7 h1 R HEAD: 只请求页面的首部。
; l/ I! g, b2 S  \ POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
# A2 E: Q$ q8 ]( G8 A7 X PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
& V7 r+ \, r5 d6 V4 D# L DELETE: 请求服务器删除指定的页面。$ l' f) k1 X" Q" W$ T
OPTIONS: 允许客户端查看服务器的性能。
( l& R& T4 c5 m6 W( v# N TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。( _! W6 C) E  A* F0 p7 n
PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
! O; r) v5 ~4 R8 y MOVE: 请求服务器将指定的页面移至另一个网络地址。
) ?" A  z: `5 h% ^ COPY: 请求服务器将指定的页面拷贝至另一个网络地址。
8 W( x! J- Z# D LINK: 请求服务器建立链接关系。+ a) o7 i$ n: \1 l
UNLINK: 断开链接关系。
1 ], h: @; c7 ^1 u3 _% }5 W& s0 V WRAPPED: 允许客户端发送经过封装的请求。3 z" J& T( z" m- ^$ Y6 \3 J
Extension-mothed:在不改动协议的前提下,可增加另外的方法。$ _' N2 S. Z4 ?2 s) ~4 q
当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:
" G5 i% F' t+ n6 J" d0 P① 客户方错误
9 v2 a$ p& G) ~8 A. r 100  继续: d  G2 Z# T) W+ ?& w2 v
101  交换协议1 j0 ]6 a4 x$ V, [5 A1 {
② 成功- a2 a! P# z( M2 R( K! @! d) B
200  OK
* D' N8 v+ M# i3 D9 } 201  已创建
0 Y/ [7 V4 j8 j2 b1 b 202  接收5 e0 W8 e$ f3 z' p" I* ]
203  非认证信息
% I9 }' C9 u. E 204  无内容
! n# m. T9 E9 M% x/ e/ a 205  重置内容
7 J$ I! t# V9 D/ f6 r# w 206  部分内容2 I& \, `7 c7 l! ?* v/ ?6 c
③ 重定向
8 K" v. g! @- c; ? 300  多路选择
) {/ t! q5 W# p/ u 301  永久转移! @- Q6 ]5 b' X9 C% b$ G& D1 W  x
302  暂时转移
$ }& N2 F' J6 d- y* P$ ^9 X' c 303  参见其它! l, m2 m! J! ~' n# |  @
304  未修改(Not Modified)( V4 Z6 @" d  x. v. J
305  使用代理
9 i) f* _0 K* l) x8 m7 y; ^④ 客户方错误
8 m6 ]0 g' p0 Y" h* X4 i0 @! I9 K* | 400  错误请求(Bad Request)
' p3 O( \" L- O 401  未认证0 J  _& r2 C1 e% R) B
402  需要付费8 w% D6 q: r  o+ I, x4 |
403  禁止(Forbidden)! L& \9 q# U+ Q) i( ?' I
404  未找到(Not Found)
9 A  c" A0 Q3 s7 r 405  方法不允许
4 ?4 ?" F7 n1 c( O# d 406  不接受
. W! Y7 V) r) Y$ O3 q( U 407  需要代理认证
- C6 k1 U' j7 {. q8 ? 408  请求超时. ?" P" S# D2 X+ U1 M9 a3 l; B
409  冲突9 M; _9 n" y4 `) R; B* s
410  失败9 I3 K+ B% F1 w0 w  }5 D# I
411  需要长度
7 e3 E- v. L7 z& c9 i5 p4 q0 h+ y 412  条件失败0 D+ n+ u6 W6 L0 q; {7 W
413  请求实体太大
  F; H, g/ |7 G- b/ q 414  请求URI太长$ X4 i( }! o( O. v1 I9 l- [, ~. W
415  不支持媒体类型: \& D6 g( Z4 _$ v9 l( {
⑤ 服务器错误: ]% {" K1 x9 Z3 V! q7 {2 {
500  服务器内部错误
/ R6 G: B8 ?; B, o& v# t 501  未实现(Not Implemented)
9 m2 E3 B, U6 e: l8 ` 502  网关失败
" j. X7 B/ O$ q. [" | 504  网关超时
. f# _5 D# E/ U5 { 505 HTTP版本不支持- E& l; u2 P/ y: C% [/ I- f" E
关于实体头部的内容还可以有:
$ V# l0 W  {  D2 M! M* OLast Modified :请求文档的最近修改时间。+ D$ ^" e* r! }- |( f( k
Expires :请求文档的过期时间。
8 Y5 o" E4 z- N- _Connect-length:文档数据的长度。
! I  |( I$ z  O) y3 KWWW-authenricate:通知客户端需要的认证信息。
2 z/ }% R! v( m1 Z  }& b9 |' zConnect-encoding :说明有无使用压缩技术。, N7 ?2 S9 W1 Z! N; q6 _
Transfer-encoding :说明采用的编码变换类型。+ Q6 g* x" b/ c( K
标准Http协议支持六种请求方法,即:
8 l$ j; Y0 O/ e8 P3 u( {( x 0,GET
/ ^; U& t* K: Y5 ?6 o; N. \2 [) h 1,HEAD" r+ m( t- O9 V0 g( k
2,PUT$ y- l# C/ u5 x  y" t4 W
3,DELETE
0 @- |# g& I8 z) P 4,POST. C0 {. ?8 \- t
5,OPTIONS3 T2 G$ x. [# ]- D! b! ~
但其实我们大部分情况下只用到了GET和POST。如果想设计一个符合RESTful规范的web应用程序,则这六种方法都会用到。不过即使暂时不想涉及REST,了解这六种方法的本质仍然是很有作用的。大家将会发现,原来web也是很简洁明了的。下面依次说明这六种方法。$ c2 M# C! r9 R1 B5 `; q- \' R; f1 d
0,GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
+ ^+ }2 i" @: ~! u3 [' \ 1,HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。  ?, X/ V( `% ]0 r4 q4 N
2,PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。5 c. o: _  ^2 h1 m+ G( Y
3,DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。
/ \! g8 x! V* ^: [ 4,POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。, Y3 V- N" S- X9 R3 {' V6 R2 x  ]
5,OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。- x1 ?* x! B; O% k: Y8 T& q: M% n, M+ Z
其实还有一个TRACE方法,不过这个基本上不会用到,这里就不介绍了。以上的六种方法,我们可以跟数据库的CRUD增删改查操作对应起来:% H( D  `) l( s* r! u8 R) i& e4 ^
CREATE :PUT" X: [2 m5 |/ }2 N+ Z
READ:GET
1 X! K( c  ^  p- O- A! q# _9 ^6 l# b UPDATE:POST
# `( U$ f& Q; L DELETE:DELETE
0 O* D: ~7 S; e8 `# K1 l 这样一来就实现了HTTP和数据库操作(其实不光是数据库,任何数据如文件图表都是这样)的完美统一,这也是REST的精髓之一。) d: I. B7 [) Z! L& P* F
1 t) b* P7 M6 P0 b' Y0 d
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2025-5-5 03:53 , Processed in 0.019623 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表