前后端数据交互(八)——请求方法 GET 和 POST 区别
WEB 开发同学一看 get 和 post 请求方法的区别,第一感觉都是 So easy!
学习ajax、fetch、axios时,发送网络请求携带参数时,都需要分别处理get和post的参数。所以我们需要学习get和post的区别,以便更好地进行前后端数据交互。get 和 post 区别你到底知道多少呢?
一、GET 和 POST的区别
|
GET |
POST |
后退按钮/刷新 |
无害 |
数据会被重新提交(浏览器应该告知用户数据会被重新提交)。 |
书签 |
可收藏为书签 |
不可收藏为书签 |
缓存 |
能被缓存 |
不能缓存 |
编码类型 |
application/x-www-form-urlencoded |
|
历史 |
参数保留在浏览器历史中。 |
参数不会保存在浏览器历史中。 |
对数据长度的限制 |
是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 |
无限制。 |
对数据类型的限制 |
只允许 ASCII 字符。 |
没有限制。也允许二进制数据。 |
安全性 |
与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET ! |
POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
可见性 |
数据在 URL 中对所有人都是可见的。 |
数据不会显示在 URL 中。 |
二、本质区别
2.1http协议
浏览器和服务器之间是通过http协议进行数据通信的,而get和post是http协议其中的两个方法。想要更多了解http协议,请点击《网络请求详解》。
http协议底层是 TCP/IP ,把TCP比作汽车,用TCP给浏览器和服务器之间运输数据,它很可靠,从不会发生数据丢失现象,但是如果路上跑的全是一模一样的TCP车辆,那这个世界就非常混乱,整个系统就会瘫痪。为了避免这种情况发生,http 定义了交通规则,给汽车运输设定了好几个服务类别,有 GET、 POST、 PUT、 DELETE 等等。它们的作用分别为:
- GET:从服务器上获取数据,仅仅查询服务器上的数据,不进行修改。
- POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
- PUT:从客户端向服务器传送的数据,也就是添加数据。
- DELETE:字面意思删除,客户端请求服务器删除指定的内容。
当执行GET请求时,汽车贴上get标签,而且要求把货物放到车顶(url)方便记录,当执行POST请求时,贴上post标签,将货物放置车厢内(body)。
2.2、为什么说 get 比 post 更快?
get 产生一个TCP数据包,而 post 产生两个数据包。
get 发送数据的时候,url把header和data数据带着一起传送到服务器,然后返回结果。但是 post 会先发送 header 到服务器,服务器响应 100 之后,继续向浏览器发送data,服务器接收完之后,会验证数据完整性,然后返回结果。
post 要比 get 多进行一次数据传输,所以 get 比post更快。好多人想着,为了提升网站速度,把所有post改成get方式,这样合适吗?
- 网速快的时候,发一次数据和发两次数据时间差一点点,基本可以忽略,但是网速慢的时候,post 可以验证数据完整性,有非常大的优点。
- get 和 post都有自己的语义,不能随便混用。
- 并不是所有浏览器 post 都会发送两次数据,火狐浏览器只发一次。
三、面试怎么回答?
- post更安全。
- post可以发送更大数据。
- post能发送更多数据类型。
- post比get慢。
- post用于修改和写入数据,get一般用于分享搜索筛选之类操作。