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

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

[复制链接]
发表于 2012-6-11 16:24:20 | 显示全部楼层 |阅读模式
原文: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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 04:44 , Processed in 0.025979 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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