GET请求和POST请求的区别

1.对比
在这里插入图片描述
2. post在真正接受数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据
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 左右

3.post不能进行管道化传输
http权威指南中是这样说的:
1.http在的一次会话需要先建立tcp连接(大部分是tcp,但是其他安全协议也是可以的),然后才能通信,如果每次连接都只进行一次http会话,那这个连接过程占的比例太大了!

2.于是出现了持久连接:在http/1.0+中是connection首部中添加keep-alive值,在http/1.1中是在connection首部中添加persistent值,当然两者不仅仅是命名上的差别,http/1.1中,持久连接是默认的,除非显示在connection中添加close,否则持久连接不会关闭,而http/1.0+中则恰好相反,除非显示在connection首部中添加keep-alive,否则在接收数据包后连接就断开了。

3.出现了持久连接还不够,在http/1.1中,还有一种称为管道通信的方式进行速度优化:把需要发送到服务器上的所有请求放到输出队列中,在第一个请求发送出去后,不等到收到服务器的应答,第二个请求紧接着就发送出去,但是这样的方式有一个问题:不安全,如果一个管道中有 10 个连接,在发送出 9 个后,突然服务器告诉你,连接关闭了,此时客户端即使收到了前 9 个请求的答复,也会将这 9 个请求的内容清空,也就是说,白忙活了……此时,客户端的这 9 个请求需要重新发送。这对于幂等请求还好(比如 get,多发送几次都没关系,每次都是相同的结果),如果是 post 这样的非幂等请求(比如支付的时候,多发送几次就惨了),肯定是行不通的。

4.所以,post 请求不能通过管道的方式进行通信!

5.很有可能,post 请求需要重新建立连接,这个过程不跟完全没优化的时候一样了么?

6.所以,在可以使用 get 请求通信的时候,不要使用 post 请求,这样用户体验会更好,当然,如果有安全性要求的话,post 会更好。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值