get请求与post请求区别于联系

查阅资料得到下面的一些知识,记录一下:


get和post是HTTP请求的两种方式,底层都是基于TCP/IP协议进行通信的。get和post本质并无区别,只是被HTTP规定了不同的行为和方式。


get请求在浏览器后退时无害,不发送请求。post在浏览器后退时会再次发送请求。get参数通常放在url后面传递,post则通常放在请求体中传递。但实际上,get也可以用请求体少量传值,post也可以在url中少量传值,这在技术上是完全行的通的,只是不符合http的规定。


get比post更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。get在url中传输参数有长度限制,post没有限制。get之所以会限制请求长度,是因为url请求数据量太大对浏览器和服务器都是很大的负担,处理起来有成本,所以浏览器和服务器对单次访问都做了限制。大多数浏览器通常都会限制url长度在2K个字节,而大多数服务器最多处理64K大小的url。超过的部分不处理。虽然get可以带请求体,但不能保证一定能被接收到。所以此处的不同,是因为HTTP的规定和浏览器/服务器的限制,导致它们在应用过程中体现出一些不同。所以如果请求参数可能很长很多的话,直接用post即可,如果用get,超过限制,参数传不过去,会报null。


get产生一个TCP数据包,post产生两个TCP数据包。对于get方式的请求,浏览器会把HTTP头部和数据一并发送出去,服务器响应200返回数据;而对于post,浏览器会先发送头部,服务器响应100 continue,浏览器再发送数据,服务器响应200返回数据。也就是post请求,第一次将头部发送过去,确认服务器和网络没问题可以服务,才会将真正的数据提交。 因为post需要两步,时间上消耗的要多一点,所以看起来get比post更快,但并不是所有浏览器都会在post中发送两次包,火狐浏览器的post请求就仅发送一次。


get与post都有自己的语义,不能随便混用。get从指定的资源获取数据,post是向指定的资源提交数据。在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。也就是说,网络好的话get和post请求效率基本一样,网络不好的时候post对验证请求数据完整性更有优势。 作者:枫很轻 https://www.bilibili.com/read/cv17873943 出处:bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值