HTTP协议在现代网络通讯中被普遍应用,在HTTP 1.0版本中有7种请求方式,在HTTP 1.1版本中有8种请求方式,而这些请求方式中最经常使用的就是GET和POST,网上关于GET与POST请求方式的区别的文章不少,但却都不够全面。如今咱们来全面阐述这两种方法的区别。数据库
(一)从HTTP报文来看浏览器
GET请求方式将请求信息放在URL后面,请求信息和URL之间以?隔开,请求信息的格式为键值对,例如 https://baike.baidu.com/item/Python/407313?fr=aladdin,这种请求方式将请求信息直接暴露在URL中,安全性较低。另外从报文结构上来看,因为请求信息放置在URL中,所以请求报文中不须要报文体。缓存
POST请求方式将请求信息放置在报文体中,相得到请求信息必须解析报文,所以安全性较GET方式要高一些(事实上要得到报文体中的请求信息也是很容易的,所以安全性上二者并无太多的区别,具体解决传输过程当中的安全性问题还要靠HTTPS),此外在请求报文中含有报文体。安全
因为GET中的请求信息放置在URL中,所以是有长度限制的,由于URL自己是有长度限制的。POST中的请求信息是放置在报文体中,所以对数据长度是没有限制的。服务器
(二)从数据库层面来看网络
CET请求方式符合幂等性和安全性,(幂等性的定义:对数据库的一次操做和屡次操做得到的结果是一致的,则认为符合幂等性。安全性的定义:对数据库的操做没有改变数据库中的数据,则认为符合安全性),GET请求方式是作查询操做,所以不会改变数据库中原有的数据,认为符合安全性。事实上GET请求可能会出现屡次请求的结果(例如在两次请求中间对数据库中的数据做了更改),从这来讲是不符合幂等性的定义,可是由于GET请求知识查询数据库,不会对数据库作任何更改,所以也认为是幂等的。spa
POST请求方式是既不幂等又不安全,首先POST请求方式往数据库中提交数据的,所以会改变数据库中的数据。其次,POST请求方式每次得到的结果都有可能不同,由于POST请求是做用在上一级的URL上的,则每一次请求都会添加一份新资源(这也是POST和PUT方式的最大区别,PUT方式是幂等的)。资源
注意:在这里提到的安全性和上一部分提到的安全性不是同一律念,不要混淆。it
(三)从其余层面来看请求
GET请求可以被缓存。
GET请求会保存在浏览器的浏览记录中。
以GET请求的URL可以保存为浏览器书签。
而POST方式都不具有上述功能。缓存也是GET请求被普遍应用的根本,在现代网络上天天产生的请求数目是巨大地,而且其中绝大部分请求均为只读请求,若是全部这些请求都要交由 Web 服务器直接处理,这无疑是巨大的资源浪费。从第二部分知道GET表达的是一种幂等的、安全的,它除了返回结果不该该会产生其它反作用,所以绝大部分GET请求(一般超过90%)都直接被CDN缓存了,这能大大减小 Web 服务器的负担。 而POST是非幂等的,有反作用的操做,因此必须交由 Web 服务器处理。