【爬虫知识】你真的完全了解了 post 和 get 的区别和联系吗?

一、联系

get和post是HTTP协议中的两种发送请求的方法,底层都是用TCP/IP协议进行通信的。

客户端ip发出请求,发出的请求数据包会通过tcp协议,经网络传输给远程服务端ip,服务端ip收到请求包之后,解析并处理请求包最后服务端会通过tcp协议将处理结果返回给客户端ip,用户便可以查看到想要的响应数据。

get和post本质上都是TCP链接, 之所以有get和post区分,是因为他们底层数据的传输都是基于tcp协议,需要通过HTTP的规则和浏览器/服务器的限制进行区分,使他们在应用过程中体现出不同。

HTTP给网络运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给请求包贴上GET的标签(设置method为GET),而且要求把传送的数据放在url中以方便记录。如果是POST请求,在请求数据包贴上POST的标签。

二、区别

最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。

最重点的区别是:GET产生一个TCP数据包,POST产生两个TCP数据包。也就是说,对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器第一次先将header发送过去,服务器若响应100 continue,确认服务器和网络没问题可以服务,才会再将真正的data数据提交,服务器响应200 ok。

看到这,你可能会认为POST消耗时间更多,因此GET比POST更有效,准备用GET来优化网站。但这是个大坑!为什么呢?
在这里插入图片描述

  • 首先,get在url中传输参数有长度限制,post没有限制;这是因为浏览器和服务器对过大的url请求数据量处理起来成本过高,故对单次访问都做了限制,一旦超出限制就不会处理后续请求,这就导致即使GET带request body,其参数也不一定能被接收到,会返回null错误,所以对于长而多的请求参数直接用post即可;
  • 其次,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以忽略,在网络环境差的情况下,两次包的TCP在验证数据包完整性上更有优势;反观get将参数直接暴露在URL上,非常不安全,因此不能用它来传递敏感信息;
  • 最后,并不是所有浏览器都会在POST中发送两次包,Firefox只发送一次。

三、实际使用时

get:只为获取数据,同时加上请求参数的url不会特别大,且没有需要保密的字段,则用get请求;
post:为了提交数据,比如提交一些数据给后台保存、删除等,无论是否有一定数据量均可使用;另外,使用post提交请求来get数据也是可以的。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值