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

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

[复制链接]
发表于 2012-6-11 16:24:20 | 显示全部楼层 |阅读模式
原文:http://changfakong.diandian.com/post/2012-02-13/15973956/ R* p7 ?$ H: O( K0 ^7 p& q

1 e9 @0 R! S! @1 ]请求方法是请求一定的Web页面的程序或用于特定的URL。可选用下列几种:
4 W- [0 K' J0 d* W* o8 x, c GET: 请求指定的页面信息,并返回实体主体。
- O4 [: H; R, f# p* O HEAD: 只请求页面的首部。
  e$ d: s7 y" I POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。0 w+ F- h8 P8 J  W& I2 D9 d
PUT: 从客户端向服务器传送的数据取代指定的文档的内容。" u* ]" |- }/ S* _6 X8 I& A" a
DELETE: 请求服务器删除指定的页面。
6 U$ w: z8 |& s9 Y/ w. u& n& X  { OPTIONS: 允许客户端查看服务器的性能。
7 A  ^( s: L& l) s* R TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。! \8 V" o2 Z+ E9 g6 U
PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
6 ~& I4 d) \6 H4 d9 p7 [- D6 B9 g MOVE: 请求服务器将指定的页面移至另一个网络地址。
' j; W- x: f0 e8 F6 Z COPY: 请求服务器将指定的页面拷贝至另一个网络地址。0 a& M! i6 R' w" U4 c
LINK: 请求服务器建立链接关系。+ D/ U& ]' ?7 l6 M8 [
UNLINK: 断开链接关系。" p3 j$ e6 r6 q0 _: P
WRAPPED: 允许客户端发送经过封装的请求。# \5 B! U0 C; W$ u
Extension-mothed:在不改动协议的前提下,可增加另外的方法。  y, d0 l' d& W. {, z+ e
当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:+ E" I  [% a# {; y7 U$ U3 A
① 客户方错误+ U! s: M) f7 y
100  继续
0 @. u3 t) C! F' K* m6 g 101  交换协议) z% t3 _( C* I: i* a# t6 K( ~
② 成功
" b# Q1 U( {/ } 200  OK: _$ u0 d7 f( h' ]9 A# K: V
201  已创建
/ `/ m& E' i: t2 U 202  接收8 u$ O, l& H- }4 s4 {2 A5 ]
203  非认证信息, U6 @9 V9 h8 d( c
204  无内容2 b. C4 Q4 ^( W/ g4 j8 }8 a
205  重置内容
8 _1 \8 q/ \; Q" q, \* M3 k) Y 206  部分内容& \% j# m5 t- v7 p2 P% @" U
③ 重定向
8 ^2 b: E8 l7 R2 q# v) C" t8 M6 P7 { 300  多路选择( ?) h7 F! f7 A/ [3 _2 c) z
301  永久转移3 @( h# d: L# R) z1 `! U
302  暂时转移. E5 Q9 t* P. l' T* f8 [1 X- x- F
303  参见其它
$ U0 p2 q* j# ^7 w: E- H 304  未修改(Not Modified)
6 o- g7 D7 l+ e$ i, `+ Z- c 305  使用代理
0 N& i' h( Q; ~2 E- H④ 客户方错误9 O( [$ X8 |. i8 |9 a
400  错误请求(Bad Request)
' h1 U: z0 `' c$ V! v 401  未认证$ R) f- f* p* d! z
402  需要付费
& d7 P& T* \2 I7 j 403  禁止(Forbidden)9 _/ W6 T0 k. c* U
404  未找到(Not Found)
7 N  A. {: d2 p1 F# ^" [ 405  方法不允许2 G) i: @# V2 ^" [3 D* B
406  不接受" }) {/ T$ Y- P  U6 b9 {
407  需要代理认证
2 f+ Y" O% \  C% A5 s! F/ @. k 408  请求超时5 Q/ n+ b9 h9 \, S+ l; v
409  冲突
& `* N2 Z6 a9 B+ S 410  失败: w. ~( @' u' u0 C& k# V
411  需要长度
* ]: U9 Q1 \, v& `6 C* s  m 412  条件失败0 H6 Z* z4 l9 C5 q5 v
413  请求实体太大
. u  i5 d+ N5 i+ e. \. J0 @- v& e 414  请求URI太长
$ l! j5 d* H0 N! T" P 415  不支持媒体类型
- I, F3 p  u, q⑤ 服务器错误
7 d7 C1 D: u# V' U9 T4 C- c 500  服务器内部错误
6 R4 _7 T% w6 L! z7 ?0 ~9 j 501  未实现(Not Implemented)8 L. Y; n. p' I3 ^2 o6 D! g
502  网关失败# d" [& r3 X4 t4 y  z
504  网关超时! U4 F2 H5 I3 a* }+ g* c
505 HTTP版本不支持
# |: v" \* N! S  H: {# P关于实体头部的内容还可以有:
, i) c9 ]7 {( N) y# ]% m# T3 uLast Modified :请求文档的最近修改时间。
& w: h' W2 N: G3 C0 v* V9 _' {Expires :请求文档的过期时间。
& N; y2 F: U$ q5 f! Q7 E. kConnect-length:文档数据的长度。
* u- S  |7 A& k3 [9 O- ?WWW-authenricate:通知客户端需要的认证信息。/ d( N' l: c* B  C
Connect-encoding :说明有无使用压缩技术。
, U* ~$ o: k8 e( ?, T7 i7 S3 NTransfer-encoding :说明采用的编码变换类型。0 `, X9 X/ i6 B; P. k+ P
标准Http协议支持六种请求方法,即:
% {2 `) [& c% r* M9 D2 u/ O 0,GET
& X: D  ~' n7 Z- M$ v# k 1,HEAD2 u7 s  I7 l9 d7 R# C, s
2,PUT0 r/ j: \" V3 l
3,DELETE
2 g( [# K9 Q7 c% d' R$ _' r+ i 4,POST
! {! c3 `* z  r' R 5,OPTIONS
3 U' C* q! d) O5 ?4 w7 A; f 但其实我们大部分情况下只用到了GET和POST。如果想设计一个符合RESTful规范的web应用程序,则这六种方法都会用到。不过即使暂时不想涉及REST,了解这六种方法的本质仍然是很有作用的。大家将会发现,原来web也是很简洁明了的。下面依次说明这六种方法。
( u, e" |- F0 V4 Z 0,GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。) S+ H: U# _7 ]: J* L
1,HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。5 Z- s9 Z/ ~1 w% e
2,PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。
# ^% w1 k& b' K 3,DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。# z+ _8 t/ \9 `6 ]1 ]& C
4,POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。) ]4 T/ h; }9 M$ i7 ?; l% u
5,OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
+ F( ?# B# c- \2 U$ ~ 其实还有一个TRACE方法,不过这个基本上不会用到,这里就不介绍了。以上的六种方法,我们可以跟数据库的CRUD增删改查操作对应起来:! m* J, V' R% R7 [% n
CREATE :PUT
# D; R" \  ?* ]9 m% J READ:GET
% ]. e6 S+ d+ _! }! p UPDATE:POST
7 Q7 S# ?$ _2 y7 e  \& \ DELETE:DELETE
% k$ K9 @9 s  Y( i: n+ O 这样一来就实现了HTTP和数据库操作(其实不光是数据库,任何数据如文件图表都是这样)的完美统一,这也是REST的精髓之一。, G, s6 A& D: V( @0 ~

2 ~: J- n  n2 l$ U2 G  m' b
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 08:43 , Processed in 0.024106 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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