事实上,GET和POST并没有语法上的区别,二者仅仅是语义上的区别。
GET和POST的底层都是TCP链接,如果想要在GET请求的请求体中放置数据,或者在POST请求的URL中放置数据,这在技术上是完全可以实现的;但这并不符合HTTP协议的规范;那么,为什么HTTP协议要将这两者区分开来呢?又是以什么标准区分的呢?区分之后又会产生什么样的影响呢?
-
首先,为什么区分?
如果把TCP/IP比作公路,GET和POST请求等TCP链接就像是汽车,而HTTP就是交通规则。为什么要将汽车区分开来呢?当然是为了方便管理了。 -
其次,是以什么标准区分的呢?
幂等!
GET请求是幂等的,而POST请求是不幂等的。幂等,就是一次请求和多次请求产生的副作用相同。
举个例子,GET请求我们都知道通常用做请求资源,而POST请求则被用来提交资源;两者就像是读操作和写操作的关系,读一次和读多次效果是一样的,而写一次和写多次自然会产生不同的结果了。 -
最后,区分开之后又会产生什么样的影响呢?
GET后退按钮/刷新无害,POST数据会被重新提交;GET书签可收藏,POST为书签不可收藏;GET能被缓存,POST不能缓存……balabala……
此等区别,皆为表象。GET和POST请求的所有区别,都是在HTTP这套行为准则的规范下存在的,二者的使用方式决定了二者的区别。
这也正是我第一句所讲到的“没有语法区别;只有语义区别。”
(PS:至于安全性,在面对攻击的时候,二者几乎同样脆弱;数据的安全还是依赖于加密处理,而业内通用做法是https)