关于HTTP请求方法有两个比较重要的概念:安全与幂等。
安全指的是什么?
在 HTTP 协议里,所谓的“安全”是指请求方法不会“破坏”服务器上的资源,即不会对服务器上的资源造成实质的修改。
按照这个定义,只有 GET 和 HEAD 方法是“安全”的,因为它们是“只读”操作,无论 GET 和 HEAD 操作多少次,服务器上的数据都不会受到影响。
而 POST/PUT/DELETE 操作会修改服务器上的资源,增加或删除数据,所以是“不安全”的。所以后两个方法现在很多服务器直接不支持或不处理。
什么是幂等?
“幂等”实际上是一个数学用语,被借用到了 HTTP 协议里,意思是多次执行相同的操作,结果也都是相同的,即多次“幂”后结果“相等”。比如1的3次幂还是1。
安全和幂等并不冲突,比如GET 和 HEAD 既是安全的也是幂等的,因为不管请求多少次,服务器的资源永远没有变化,结果相同。DELETE 可以多次删除同一个资源,效果都是“资源不存在”,所以也是幂等的。
POST 和 PUT 的幂等性质就略费解一点。
按照 RFC 里的语义,POST 是“新增或提交数据”,多次提交数据会创建多个资源,所以不是幂等的;而 PUT 是“替换或更新数据”,多次更新一个资源,资源还是会第一次更新的状态,所以是幂等的。
POST是新增,会导致资源增加,所以不是幂等。
PUT是替换,替换不会增加,1替换成了另一个1,结果还是1,所以PUT是幂等。
用数据库来理解,POST是INSERT,PUT是UPDATE,会更加清晰。
此文章为2月Day12学习笔记,内容来源于极客时间《透视HTTP协议》,强烈推荐该课程!