Go ahead every day !

HTTP Post &Get 区别

上一篇 / 下一篇  2011-05-30 16:26:00 / 个人分类:测试周边知识

51Testing软件测试网_6CsL DY/Lq

一 原理区别51Testing软件测试网sU-jAB b RL

j:L#p9m#V,HFh1U'W0    一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交51Testing软件测试网*~8i6i/W-eC+lH7{

N_)QcT_Sb,TCl0    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE

]8qK0_1xed S051Testing软件测试网 x-Yz#NU#\/r

    URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查 ,改 ,增 ,删 4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询 资源信息,而POST一般用于更新资源信息(个人认为这是GET和POST的本质区别,也是协议设计者的本意,其它区别都是具体表现形式的差异 )。51Testing软件测试网b oQ-ts j-_4d

51Testing软件测试网? q+bZ%ld

  根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的51Testing软件测试网6|7s8l2rXX"b

51Testing软件测试网)[TN$mkt{.f

  1.所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。

u h9cP%w-h051Testing软件测试网xI0Be{)I0m#k

  * 注意:这里安全的含义仅仅是指是非修改信息。

p*GwQ D;ho0

X#bx aD%Z7@0  2.幂等的意味着对同一URL的多个请求应该返回同样的结果。这里我再解释一下幂等 这个概念:51Testing软件测试网&pk&^UXAgD"J8vM&\

0x!h A'j,Q)S/@$};m0  但在实际应用中,以上2条规定并没有这么严格。引用别人文章的例子:比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。从根本上说,如果目标是当用户打开一个链接时,他可以确信从自身的角度来看没有改变资源即可。

ax eUN M7pAF0

8rq%n5X`nJ N7Jq0  根据HTTP规范,POST表示可能修改变服务器上的资源的请求 。继续引用上面的例子:还是新闻以网站为例,读者对新闻发表自己的评论应该通过POST实现,因为在评论提交后站点的资源已经不同了,或者说资源被修改了。

[kd ZrL a051Testing软件测试网1k BZE4r1Ax

二 表现形式区别

?2d)y7~U Y$P051Testing软件测试网Tq Q{s VHy |Ox

    搞清了两者的原理区别,我们再来看一下他们实际应用中的区别:51Testing软件测试网+i pq'S7K_i$_

C fmYi:Zf0    为了理解两者在传输过程中的不同,我们先看一下HTTP协议的格式:51Testing软件测试网X|q#KIUl

C|6k h{7F$Q0HTTP请求:51Testing软件测试网dx_6|]]

"}0e f]hB1p0<request line>

(X!i [ S;q0

d bFf"@Ef*c0<headers>51Testing软件测试网}$D(zp2J+xp

;IArL;S6WrN0<blank line>51Testing软件测试网${4ra1G:t8n

51Testing软件测试网J}CJs.@!G

<request-body>]51Testing软件测试网 ^6{'Dc#f*pG

51Testing软件测试网1Yf#k w ATv.C%C J

    在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。

s DD"aH0
51Testing软件测试网"p2byr8i `Y_&pm

GET与POST方法实例:51Testing软件测试网C g,]K2w"UU
GET /books/?sex=man&name=ProfessionalHTTP/1.151Testing软件测试网 w2k?7U1^3hd d[
Host:www.wrox.com51Testing软件测试网l+f;R9J.jW2x-RW
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
nzDD.e0Gecko/20050225 Firefox/1.0.1
6j)O,dTZ9HF'k0Connection: Keep-Alive

"D[(w.S6OV,d%TC0

K(z]2[/o!F'z0POST / HTTP/1.151Testing软件测试网 y2h3f N\Ka"E
Host:
www.wrox.com
%RmU:E C?0User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)51Testing软件测试网6A cp2Ew.p3@2L7x
Gecko/20050225 Firefox/1.0.1
| O fx4z@0Content-Type: application/x-www-form-urlencoded
4izIj3h O^g'o0Content-Length: 40
d oY9X3pl#jx0Connection: Keep-Alive51Testing软件测试网 U GQ&s\
     (----此处空一行----)51Testing软件测试网3L.mJ]hn#L|[
name=Professional%20Ajax&publisher=Wiley

8u4Bm]bB!x0
51Testing软件测试网3j~KiXV1Y6E

   有了以上对HTTP请求的了解和示例,我们再来看两种提交方式的区别:51Testing软件测试网,O,U.A6T#EN

6j0i)w$U o%A$C0   (1)GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

\l$\&d-[051Testing软件测试网zY^4A/D7O_Y

  POST提交:把提交的数据放置在是HTTP包的包体中。上文示例中红色字体标明的就是实际的传输数据51Testing软件测试网6PG2p#S-Kk!v

"Px2C7[R+b0     因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变

&Zy&?b"k O051Testing软件测试网 Rp Q2B_

    (2)传输数据的大小:首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。 而在实际开发中存在的限制主要有:51Testing软件测试网&oo)C9OFb+?

51Testing软件测试网n;ns*G\

    GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。 因此对于GET提交时,传输数据就会受到URL长度的限制。

~6f ^.`!`a0

Z A,|RD\/q0    POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。

4so'i5n.al,U4`051Testing软件测试网(l qDri} @]A}

 (3)安全性:

kKM&}5G2v;Iq051Testing软件测试网#v6c/x[|A5}'g

    POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存, (2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击51Testing软件测试网"j$mJ$s(kYM

GV'Z1~_r5j0(4)Http get,post,soap协议都是在http上运行的
sirtL h,j$|01)get:请求参数是作为一个key/value对的序列(查询字符串)附加到URL上的查询字符串的长度受到web浏览器和web服务器的限制(如IE最多支持2048个字符),不适合传输大型数据集同时,它很不安全
un3?oYO,g$v02)post:请求参数是在http标题的一个不同部分(名为entity body)传输的,这一部分用来传输表单信息,因此必须将Content-type设置为:application/x-www-form-urlencoded。post设计用来支持web窗体上的用户字段,其参数也是作为key/value对传输。 但是:它不支持复杂数据类型,因为post没有定义传输数据结构的语义和规则。
'VIF,R|p4MA+z1~U4C03)soap:是http post的一个专用版本,遵循一种特殊的xml消息格式
;}qA `.Yv9CrL0       Content-type设置为: text/xml   任何数据都可以xml化
51Testing软件测试网Hk+UT|7\+GM

kg,?2j-PB4[$~T"|0三 HTTP响应51Testing软件测试网%H-b6_aK
1.HTTP响应格式:

-Nm$Vi&b$`051Testing软件测试网.ARer:k3h


] q _#I)E(v_0<status line>51Testing软件测试网.IA8VN nQ#\
<headers>
*w4m'G?,Dh1p0<blank line>51Testing软件测试网Ehbf$s4]P3U^5q
[<response-body>]51Testing软件测试网(C$ed$`:us

"a;JR9T'g6T\0在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。51Testing软件测试网*@u(h z"ON'_a ^GF
     51Testing软件测试网\N8g/Titk
 HTTP响应实例:51Testing软件测试网 R$I}4w5n1KKyifD

?*ysr fvc;D0HTTP/1.1 200 OK51Testing软件测试网CEL["dwWh)eJ A&|q
Date: Sat, 31 Dec 2005 23:59:59 GMT
|ws8K9CL0Content-Type: text/html;charset=ISO-8859-151Testing软件测试网%obZ%lK tqY
Content-Length: 122
Uj&Bw:{HS5MP0<html>51Testing软件测试网s8H&dX?f
<head>
p3p`Y0Q0<title>Wrox Homepage</title>51Testing软件测试网Gz4m!B;\K3`1@@
</head>
S*d5WI'c&?(Z0<body>51Testing软件测试网q9xtT(n b
<!-- body goes here -->51Testing软件测试网y\?'L0X
</body>
,O'c\*J-@q0</html>
-N7W8@f:JR02.最常用的状态码有:51Testing软件测试网&^"lbnS8y

51Testing软件测试网 zk+n)D(i r-gT

◆200 (OK): 找到了该资源,并且一切正常。51Testing软件测试网-vSk!Dbt|
◆304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。
{ _6z1Z@-v5y!V0◆401 (UNAUTHORIZED): 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。
+es.|s9NN5j {D&T k0◆403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
*CvMHC,T0◆404 (NOT FOUND): 在指定的位置不存在所申请的资源。51Testing软件测试网Aq(hff7MB,H] Q

51Testing软件测试网y:f0T7J(bK)Q\

四 完整示例:

3yX4TC M)^Fm051Testing软件测试网Rv KsC3x;j

例子:

M8q+Mq~C0

4Iu]9K"E:K0
,m4m.V9[.fp0HTTP GET

/IOC!{ GS051Testing软件测试网.d#ld5u0l5qYI@

发送

?:Q*X*K!w4u0

iz'S;~[ |0GET /DEMOWebServices2.8/Service.asmx/CancelOrder?UserID=string&PWD=string&OrderConfirmation=string HTTP/1.1
*D,Up*L7M4f0Host: api.efxnow.com

I/mS3NgB051Testing软件测试网1i\'hLB

回复51Testing软件测试网Z;?G)k.F AO(sE6a-a/\

51Testing软件测试网4Rpu:C ];DW

HTTP/1.1 200 OK51Testing软件测试网K*T;~Y%Q$_F"Ub
Content-Type: text/xml; charset=utf-8
x2cT H-Z z%}0Content-Length: length51Testing软件测试网O T"^2M-j9`4V

B+S E$g&f+\0<?xml version="1.0" encoding="utf-8"?>51Testing软件测试网`!U%uA5K
<objPlaceOrderResponse xmlns="https://api.efxnow.com/webservices2.3">51Testing软件测试网~C:Uga8T:f"\
<Success>boolean</Success>51Testing软件测试网0T{SJ3m`g\,rf
<ErrorDescription>string</ErrorDescription>51Testing软件测试网"SJ1|AGJM,@
<ErrorNumber>int</ErrorNumber>51Testing软件测试网-m S{"y/_2~7x(xQ
<CustomerOrderReference>long</CustomerOrderReference>
1k+arG!iv ~Q0<OrderConfirmation>string</OrderConfirmation>51Testing软件测试网-` R'y5wB
<CustomerDealRef>string</CustomerDealRef>51Testing软件测试网8o$Nn1s-d
</objPlaceOrderResponse>

2~{)X N6_6q051Testing软件测试网"iB}.U1\_

 51Testing软件测试网3I@A$T`,t)}V;l

51Testing软件测试网"c V J-e\]5v}

HTTP POST

`ILR4` |Y?8s051Testing软件测试网`m+s }4e:m7Sn

发送51Testing软件测试网(piS,q#VzW{

eVo v}.t,[~0POST /DEMOWebServices2.8/Service.asmx/CancelOrder HTTP/1.151Testing软件测试网E TKhKS+l
Host: api.efxnow.com51Testing软件测试网0iX&L$KM@ y\'@
Content-Type: application/x-www-form-urlencoded
/aJbWQ\@:W0Content-Length: length51Testing软件测试网Z@f'V}5H

EH0jpF5V0UserID=string&PWD=string&OrderConfirmation=string

#|#P(YM c n4x-KCJ fX0

1T(W\4jDK$b0回复51Testing软件测试网.gR V8t_,A8z7C:p

$j2@bw~R b3Z0HTTP/1.1 200 OK
"P)U?;b.S+Q9WX0Content-Type: text/xml; charset=utf-851Testing软件测试网f6rFJ*kG
Content-Length: length

J-U]rHlg0

S4nu|&C)c4^+V}1r0<?xml version="1.0" encoding="utf-8"?>
bW(|y:|3w^0<objPlaceOrderResponse xmlns="https://api.efxnow.com/webservices2.3">
Y_&G.Hb4cw4h0n0<Success>boolean</Success>
vt4EJ.i0<ErrorDescription>string</ErrorDescription>51Testing软件测试网R0h`q{i
<ErrorNumber>int</ErrorNumber>
&dZy1\3E0<CustomerOrderReference>long</CustomerOrderReference>51Testing软件测试网/w0~r9k3gV C
<OrderConfirmation>string</OrderConfirmation>
f2L3]!^&a J$g3a0<CustomerDealRef>string</CustomerDealRef>51Testing软件测试网V/a$^*v,\ @C9E
</objPlaceOrderResponse>51Testing软件测试网Y'g%lc?l1B)}4a#^

uM!A5e K~0 51Testing软件测试网GV.Z7Di*t5F;W

;I KF#x6YCd*\0SOAP 1.251Testing软件测试网5l-Ye N"pk#V#q

51Testing软件测试网x[cnsWV

发送51Testing软件测试网y boE?ez

51Testing软件测试网V/[ibk

POST /DEMOWebServices2.8/Service.asmx HTTP/1.151Testing软件测试网 MT&wO3O Iq,G
Host: api.efxnow.com
yVbk3}&o[;B3q0Content-Type: application/soap+xml; charset=utf-8
e@y7\ w_9IR'B0Content-Length: length51Testing软件测试网^8T)~?ip0Q

51Testing软件测试网-DV ^ zMj7M lRM

<?xml version="1.0" encoding="utf-8"?>
OxN8@\w b:M0<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">51Testing软件测试网~$jceKc)i%C"\
<soap12:Body>
$S_9W1[T0b8_0    <CancelOrder xmlns="https://api.efxnow.com/webservices2.3">
RN&T I'} e J o0      <UserID>string</UserID>51Testing软件测试网|v C](m;nIf
      <PWD>string</PWD>
6i+i9SN'Wq0      <OrderConfirmation>string</OrderConfirmation>
/\w{$cu9b!n NFR0    </CancelOrder>51Testing软件测试网 Ls(n8i9c$Qoinv
</soap12:Body>51Testing软件测试网s/H(]8^e?W
</soap12:Envelope>

c*}xVCO H`051Testing软件测试网5_EJ-xNdL#A2g%c

回复

:nIn}H#c/T051Testing软件测试网`1f-~8D0{/w8l0N0?

HTTP/1.1 200 OK
S&ol lPN2U0Content-Type: application/soap+xml; charset=utf-8
)F$S8WL w_ Fh\0Content-Length: length51Testing软件测试网 E@m2\n

Z%{ l#n;}h2?0<?xml version="1.0" encoding="utf-8"?>51Testing软件测试网)P,qVbE'w J
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
8KO8F_5Y Ur;\SU0<soap12:Body>
)q,e;@DZ2Ay\eI0    <CancelOrderResponse xmlns="https://api.efxnow.com/webservices2.3">51Testing软件测试网?K4W$qW A:m
      <CancelOrderResult>
2y7bI#Fj7^0        <Success>boolean</Success>
o2T6] O1}b0        <ErrorDescription>string</ErrorDescription>
7PUqpfr.F0        <ErrorNumber>int</ErrorNumber>
e S8l(xL/@2{xkSO0        <CustomerOrderReference>long</CustomerOrderReference>
!R\Hq*q2^:J.\9e0        <OrderConfirmation>string</OrderConfirmation>51Testing软件测试网+~2D)k!t y:j8UE/l
        <CustomerDealRef>string</CustomerDealRef>51Testing软件测试网+X0Q!|v0\
      </CancelOrderResult>51Testing软件测试网U:T Ic#k4TdP
    </CancelOrderResponse>51Testing软件测试网e b/k)gnL'c |E1W9D
</soap12:Body>51Testing软件测试网+m3}:^Py%]GS3Oy
</soap12:Envelope>51Testing软件测试网$O+r]7I7mNJ B

CS [F]0 51Testing软件测试网 l,|w*Yk1jOu

3A*X:L\ P G0本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gideal_wang/archive/2009/07/02/4316691.aspx

"[.| Wh#Z a7K;`7UX?0

TAG:

 

评分:0

我来说两句

Open Toolbar