近日,对爬虫的使用增多,总结在日常使用中的一些问题,其中get与post的问题是最需要重点总结的。
首先,在以往的使用经验中,get与post是最常用的两种请求方式,最直观的区别就是get会将参数放在url中吗,而post通过requestbody传递参数,
此外,GET可后退,可刷新,可收藏,可以保存在浏览器的历史记录,以及服务器的日志中,同时GET只允许ASCII字符,因此需要进行转码,同时,最重要
的是GET长度有限制,最大长度为2K,而POST并没有长度的限制,
有以上的认知所得,日常使用中,post相对于get更加安全,然而真正的http中却并不是我所以为的。
无论是get请求还是post请求,其对服务器的请求在根本上都是根据tcp协议进行通信的,因此,在网络通信中,无论是GET还是POST,他们做的事都是一
样的,即GET也可以打上Request Body,POST也可以带上URL参数。因此,get与post的区别到底是如何生产的?
查阅资料之后发现,HTML标准中有如下定义,但是这是http标准对于http协议的用法的约定,并不能当作get与POST的区别
在URL长度上进行限制主要是以下两个原因造成的,
1.浏览器,早期的ie浏览器会对url长度进行限制,这项限制并不是只针对GET,而是针对所有请求的url,然而现在的浏览器并不会对长度进行限制,但是对url进行长度限制已经成为了习惯
2.服务器,当URL长度过长的时候,对服务器也是很大的消耗,因此大部分的服务器为了安全考虑,都会对url长度进行限制,这个限制也是针对url,对
GET和POST并没有区别。
到此,GET与POST的区别难道真的只是获取数据和提交数据的区别吗,在上网查阅资料之后,发现GET和POST在底层还是有一些区别的:
GET请求只会产生一个数据包,而POST会产生两个数据包,第一个数据包和服务器建立链接,服务器回复100,然后浏览器再次发送第二个数据包。在网络情况好的情况下,这两种在网络通信上无论是速度还是数据的完整性并没有是明确区别,但是在网络不好的时候,使用POST可以更好的保护数据的完整性。
最后需要注意的是并不是所有的浏览器的POST都会发送两次数据包, Firefox的POST就只会发送一次数据包