GET和POST的区别
前言
实际上这个问题总是会被问道,日常也常用到这两种方法,知道使用的场景,但是一直没有好好总结过,今天一并好好看看吧。
HTTP的请求类型
HTTP协议实际上是一种标准,规范,建议大家怎样去做,也方便一些底层实现,就跟交通规则一样,也就是说你不遵守也可以,你也可以使用其他方法实现,这一点可以看看参考链接5(评论也要看),下面说正题。
客户端对服务器的请求类型主要有四种:
GET(从服务器获取)
POST(向服务器发送请求数据)
PUT(更新)
DELETE(删除)
一般来讲,分别对应着查、增、更、删四种操作,不过实际上四种操作一般情况下通过GET和POST就可以完成了,所以日常使用最多的也都是这两个。
其他的用的比较少的还有一些方法,如HEAD,CONNECT等,详细的可以去看看参考链接1.
POST和GET区别
GET被浏览器强制支持(POST是可选的,不过一般都支持)
GET是幂等的,POST非幂等
GET可以被浏览器缓存,POST不可以
GET请求是『安全』的,POST不安全
POST相对来说比GET要『安全』一些
参数大小(理想和现实)
幂等
幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。
百度百科
例如abs(-1)=abs(abs(-1)),这里就是就是说每次GET得到的数据是不变的。
GET可以被缓存
比方说通过GET请求了某个url,然后一些参数都明确的附在url后面了,查看浏览器历史访问的时候就可以看见了,一些文件也在访问的同时被缓存了,而一般POST的则不会。
注:RFC中POST请求也可以被缓存,但是浏览器一般也不支持,就跟TCP/IP和OSI模型一样,理想和现实的区别
GET相对『安全』
这里的安全指的是GET不会改变服务器里的数据,而POST则一般会更改数据
POST相对『安全』
这里是说相对『安全』,url中会附带GET请求的一些参数,而POST的在url中则看不到。
注:抓包都能看见,都是明文传输
参数
RFC中并没有对请求的参数做大小限制,但是实际上浏览器对url的长度都有限制,一般对POST的数据大小也会做一些限制,所以也是标准和浏览器不一致的一个表现。