http协议中get和post的区别:

参考:http://hui.sohu.com/infonews/article/6337670107929509889

参考:https://www.cnblogs.com/yueyueyao/p/9068652.html

1#get把请求的参数放在url上,即HTTP协议头上,其格式为:以?分割URL和传输数据,参数之间以&相连。 数据如果是英文字母/数字,原样发送,如果是空格,转换为+, 如果是中文/其他字符,则直接把字符串用BASE64加密,及“%”加上“字符串的16进制ASCII码”。 post把参数放在HTTP的包体内(requrest body)。

2#GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

3#Get 方式传输的数据量非常小,一般限制在 2 KB 左右,但是执行效率却比 Post 方法好;而 Post 方式传递的数据量相对较大,它是等待服务器来读取数据,不过也有字节限制(实际上IIS4中最大量为80KB,IIS5中为100KB),这是为了避免对服务器用大量数据进行恶意攻击。

4#GET是从服务器上获取数据,POST是向服务器传送数据。

5#GET在浏览器回退时是无害的,POST会再次提交请求。

这句话简单理解就是,get会将请求参数放在请求的url中,回退操作实际上浏览器会从之前的缓存中拿结果;post每次调用都会创建新的资源。还有人说从method的定义上说,get是幂等的,老衲查了一下,等幂性的意思就是一个请求和多次请求,资源的状态是一样的。get,head,put,delete都有等幂性。

6#对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数据。

7#GET产生的URL地址可以加入书签,而POST不可以

8#GET请求会被浏览器主动cache,而POST不会,除非手动设置。

9#GET请求只能进行url编码,而POST支持多种编码方式。(

参考:https://www.jianshu.com/p/0fd3d0e2d415

四种常见的 POST 提交数据方式:

Enctype是指定将数据回发到服务器时浏览器使用的编码类型

1.application/x-www-form-urlencoded(提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码)

2.multipart/form-data(我们使用表单上传文件时,必须让 form 的 enctype 等于这个值。这种方式一般用来上传文件。)

3.application/json(告诉服务端消息主体是序列化后的 JSON 字符串)

4.text/xml(XML 作为编码方式)

10#GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

11#GET只接受ASCII字符数据类型的参数,而POST理论上没有限制

12#GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。GET参数通过URL传递,POST放在Request body中。

真相

由于POST需两步,时间消耗要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但并不一定是对的。

1. GET与POST都有语义,最好不要随便混用,要不然还不如合并为一个。

2. 据研究,在网络环境好的情况下,发一次包和发两次包的时间差别基本无差。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

3. 并不是所有浏览器都会在POST中发送两次包,比如Firefox只发送一次。

总结

1. 两者协议上是一样的,单从restful的角度看,是有语义上的区别的

2. 实践中,理解GET是取,安全、幂等、可缓存;POST是给,不安全、非幂等

猜你喜欢

转载自blog.csdn.net/qq_34602647/article/details/81429019