说一下 GET请求 和 POST请求 的区别?

 

二者在传输上基本没有区别,二者都是HTTP请求中的两种。HTTP协议是基于TCP/IP的应用层协议,所以无论GET还是POST,用的都是同一个传输层协议,所以在传输上可以认为基本无差别。

它们的主要区别如下: 

1、应用场景的区别:

GET请求是一个幂等的请求,一般用来请求获取数据,比如查询,对服务器资源不会产生影响;

POST请求不是一个幂等的请求,一般用来提交数据到后台,比如创建或者更新表单,会对服务器资源产生影响;

 幂等是指同样的请求被执行一次或者多次,最终得到的结果都是相同的。幂等性表示接口可重复调用。

 

2、安全性和参数的区别:

GET请求传递的参数一般是拼接在URL后面的,暴露在地址栏上,安全性很低,还会被保留在历史记录中

POST请求一般将传递的参数放在 Request body 请求体中,不会在地址栏显示,安全性比GET请求高一点,但是也是不安全的;

3、是否被缓存的区别:

GET请求可以被缓存,也会保留在浏览器的历史记录中;

POST请求一般不会被缓存,也不会保留在浏览器的历史记录中

通常HTTP请求只适用于不改变服务端数据的请求,比如查询类的请求,因为GET通常是用于获取数据,一般不做更新服务器数据的操作,所以符合HTTP缓存适用于不改变服务器数据的请求的原则,所以说GET请求可以被缓存。

4、请求长度的区别:

GET请求传递的参数一般显示在地址栏上,由于浏览器对URL的长度有限制,所以GET请求发送数据有长度的限制(这个是浏览器规定的,并不是RFC规定的)

POST请求一般没有请求长度的限制,因为请求数据在body上;

5、参数类型的区别:

GET请求只接受ASCII字符;

POST请求没有限制,支持更多的数据类型;

纠正一个误区,不是获取数据只能用GET请求,只是约定俗称通过GET来获取数据,只是约定并非规定,只要后端支持就可以。

6、其他区别

GET请求刷新浏览器或者回退没有影响;POST请求则会重新请求一遍;

GET请求通常是通过url地址请求;POST请求常见的则是form表单请求;

GET请求产生一个TCP数据包;POST请求产生两个TCP数据包;

具体就是:
1、GET请求时,浏览器会把 header 和 data 一起发送出去,服务器响应200(返回数据)
2、POST请求时,浏览器首先发送headers,服务器响应100 continue,浏览器再发送data,服务器响应200(返回数据)

如果把TCP传输比作汽车运输,那么GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

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

GET请求产生的URL地址可以被Bookmark;POST请求不可以;

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

GET请求只能进行URL编码(appliacation-x-www-form-urlencoded);POST请求支持多种(multipart/form-data等)

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值