当我们想到HTTP中的POST和GET的区别时,无疑都会想到一下几点:
- GET请求方式将请求信息直接加在URL以?隔开的后面,而POST请求方式将请求信息加在消息主体中。
- GET有长度限制,POST没有长度限制。
- GET会将访问页面进行缓存,而POST不会进行缓存。
- GET在浏览器中回退是无害的,而POST回退时需要再次请求。
- GET请求只能接受URL格式编码,而POST能够适应各种编码。
- 从数据库层面上来看,GET请求符合幂等性和安全性,因为GET的请求只做请求查询操作,因此不会对原有数据进行修改,而POST可能会对原有数据进行修改,所以不符合幂等性和安全性。
当说到以上几点时,看着已经说了很多GET和POST的区别了,其实不然,上述对GET和POST的区别的理解还是很浅。我们在学知识时,不仅要知其然,并且要知其所以然,那么下面来八一八其更深层次的意义。
1、其实不是GET和POST本身有自身限定,其实给GET在URL中加上Body和给POST直接在URL加上请求信息是都可以行的通的方式,那么为什么就不这样做呢?
因为HTTP协议为了将资源的最大化利用起来,所以给各自的请求方式设定好了服务类型,就像我们生活中的汽车,有小轿车,也有大货车,小轿车可以拉货,只要你给车上能塞多少,加高多少就能拉多少,但这样的效率就会太低。
2、在我们想到HTTP协议时,首先想到的是HTTP是基于TCP/IP协议的,就HTTP协议而言是一个应用层协议,所以不管是GET还是POST的方法都用的是TCP协议,所以说到了TCP协议,当不管是GET还是POST都是一个连接而已,那么为什么GET会限制其长度呢?
而真正限制GET方式的URL长度的是浏览器和服务器,浏览器限制URL最大是2K,而服务器最大处理大小是64K。
3、GET和POST的TCP连接请求而言也有不同之处:
GET请求连接是发送一个数据包,浏览器请求成功后返回一个200请求成功信息。
POST请求连接时“可能”发送两个数据包,一个是Request,当浏览器返回一个100状态信息时,再将第二个data包发送出去。
为什么说POST请求时可能是两个数据包呢?因为在有的浏览器下也发送一个包,比如火狐浏览器。
4、GET能够被缓存,能被浏览器保存在书签中,是GET今天被广泛应用的重要原因,在如今网络每天产生的请求树木上巨大的情况下,并非绝大部分请求是只读请求,那么这么多的请求都叫给Web服务器去处理,无疑对服务器所造成的负担巨大,那么由上面我们又知道GET的请求方式是具有幂等性和安全性的,所以GET的返回结果不会有副作用,而POST的返回结果会有副作用。因此GET的大部分请求直接被CDN缓存了,这样就可以减少Web服务器的负担了,当我们用GET请求时就可以到缓存中找,而POST只能同过访问Web服务器来处理请求。
HTTP中的缓存可以是:浏览器缓存、代理服务器缓存。
说到了这里就提一下CDN吧,什么是CDN?
CDN也叫内容分发网络,是一个经策略性部署的整体系统,包括分布式系统、负载均衡、请求的重定向和内容管理4个要件。内容管理和网络流量管理是CDN技术的核心所在,通过用户对服务器负载的判断,CDN确保以一种极高效的方式为用户提供服务。
CDN的好处:
解决了跨运营商和跨地域的问题,大大的降低了访问的延时。
大部分请求在CDN的边缘节点完成,CDN起到了分流作用,减轻了服务器的负担,实现负载均衡,解决了网站高流量、大并发的问题。