GET和POST的区别

要讲清楚这两个请求方法的区别,其实可以从RTC(一个互联网规范)对HTTP协议描述的特性出发

HTTP协议对请求方法规定了这几个特性:安全性、幂等性、可缓存性

首先是安全性。如果一个方法的语义是只读,那它就是安全的,也就是意味着它不会对服务器的资源作任何的改动;它是无害的。这些都是属于规范层面,但在实际操纵中的实现不一定是安全的,例如用GET方法修改用户信息

其次是幂等性。概念是同个方法执行多次和执行一次效果是一样的。GET方法是幂等的,POST方法不幂等。原因是可以从为什么要引入幂等性思考?主要是为了处理同一个请求重复发送的问题。例如用户填写了表单,表单数据用POST提交到服务器,此时用户不小心使得浏览器后退或者刷新了页面,浏览器就会提示用户数据会丢失,保证POST过去的都不是重复的

最后是可缓存性。GET方法可以缓存,POST方法不可缓存,这也是处于语义上的需要

还要其他一些区别:GET有长度限制,这和GET是通过URL参数传递信息有关;POST长度不限;

总结:GET方法是获取指定资源,它是安全的、幂等的、可以缓存的;POST方法根据报文主体的payload对指定资源作处理,它是不安全、不幂等

参考链接:MDN上关于HTTP的阐述