浅谈get和post请求
前几天和小伙伴交流的时候我忽然聊到面试的话题,聊到了客户端请求服务器数据的几种方式。我们现在就来说说这几种方式以及它们的主要区别。
基本的几种请求方式
get、post、put、delete四种方式是我们之前的几种方式,俗称增删改查。
但是,这四个功能只需要一个请求方式即可全部实现,那就是post请求。
所以我们现在主要使用
get方法请求数据,post方法修改数据,哈哈哈。
好了,话不多说,其实我主要想说的是这两种请求方式的区别。
区别
首先,我们知道的是这两个方式的名字不同。手动滑稽。😂
- 数据位置
get请求是把请求的数据放在url上以?分割url参数之间使用&相连接,而post请求是把请求的数据放在HTTP的请求体(Request Body)中。
- 编码方式
get请求只能进行url编码,而post支持多种编码方式
- 数据长度
get请求的数据最大2k,原则上说url是没有限制的,但是浏览器本身会限制这个url,通常浏览器都会将url控制在长度为2k个字节。
- bookmark(书签标记)
get请求产生的url地址是可以被bookmark,但是post不行.
tcp包
在请求过程中,get会产生一个tcp包,post请求会产生两个tcp包。(火狐浏览器只发送一个包)
get:浏览器会将请求头和data一起发送出去,服务器响应200 ok(返回数据);
post:浏览器先发送请求头 (request header),服务器响应100 continue,浏览器会再发送请求体(其中包含着数据),服务器响应200 ok (返回数据)
- 安全
post请求更加安全一些,get请求会将数据直接暴露在url中
- 缓存
get请求的数据会被浏览器主动缓存(cache)起来(历史记录),而post请求不会,除非你手动设置。
- 回退
get请求在浏览器回退的时候是无害的,而post会再次发送请求。