GET 和 POST 请求的优缺点、区别

首先GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。

一般来说,我们会从三个点回答

1、GET把参数包含在URL中,POST通过request body传递参数。所以相比GET,POST要更加安全

2、数据库层面GET具有幂等性和安全性,POST不符合

3、其他层面:GET可以被缓存、被存储,而POST不行

但是很可惜,这不是面试官想要的答案?来吧,solo一波把。真正想要的回答是个啥玩意。

回归本质,其实GET和POST是HTTP协议中的两种发送请求的方法。

那么HTTP是什么?

HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。

HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。

那么,“标准答案”里的那些区别是怎么回事?

GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。 GET和POST的重大区别,简单的说:

GET产生一个TCP数据包;POST产生两个TCP数据包。详细来说见如下过程:

post请求的过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
(4)服务器返回100 Continue响应
(5)浏览器发送数据
(6)服务器返回200 OK响应
get请求的过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
(4)服务器返回200 OK响应
也就是说,目测get的总耗是post的2/3左右,这个口说无凭,网上已经有网友进行过测试。

所以这才是GET比POST更快的根本原因,但是再网速情况好的时候可以忽略不记,但是差的时候就可以体现出来了。

那么回答的标准答案可以怎么说呢:

(1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
(2)post发送的数据更大(get有url长度限制)
(3)post能发送更多的数据类型(get只能发送ASCII字符)
(4)post比get慢,get和post请求的过程中GET产生一个TCP数据包;POST产生两个TCP数据包。
(5)post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作(淘宝,支付宝的搜索查询都是get提交),目的是资源的获取,读取数据,而post用来提交数据。所以GET具有幂等性和安全性,POST不符合

发布了68 篇原创文章 · 获赞 9 · 访问量 7467

猜你喜欢

转载自blog.csdn.net/u013025649/article/details/102662852
今日推荐