最近做 web 项目发现对 HTTP 的各种方法的语义把握的还是不到位,常见的 HTTP 方法有:GET,POST,PUT,DELETE,PATCH,HEAD,OPTIONS,另外还有一些不常见的 LINK,UNLINK 等,下面对一些常见的 HTTP 方法的语义进行总结如下:

GET

基于给定的信息或者条件来获取资源。GET 被定义为安全的 HTTP 方法,GET 请求是不应该修改服务器的状态的。

POST

基于给定的信息来在当前资源的下一级创建一个新的资源。所以 POST 似乎应该作用于一个集合,但由于 HTML 的表单提交只支持 POST 和 GET 方法,所以 POST 方法的很多运用并不符合这一定义。但是 HTTP 规范中 POST 方法可以具有以下功能:

  • 对现有资源的标注
  • 向布告栏,新闻组,邮件列表或者类似的信息的集合发布信息
  • 向数据处理流程提供例如表单提交结果的数据块
  • 通过追加操作来扩充数据库

所以在 form 表单中的提交中使用 POST 也是没有问题的。只是说明一点,POST 方法有时候并不完全符合 用来创建资源 这样一个定义。具体的语义要根据实际项目的场景来衡量。

DELETE

销毁一个资源。当客户端希望让一个资源消失的时候,可以发起一个 DELETE 请求来将服务器中的资源销毁。服务器可以决定是否允许删除。

PUT

用给定的表述信息替换资源的当前状态。PUT 用于修改资源的状态,服务端会根据用户提供的信息来更新资源的状态,从而让资源的状态和用户描述的一致。同样的 PUT 方法也是幂等的。

PUT 方法,也可以用来创建资源,但是它与 POST 的区别在于 PUT 方法执行多次只会创建一个资源,后续的 PUT 会覆盖之前的资源,但是 POST 会生成多个副本。

获取服务器发送过来的报头信息。HEAD 方法的响应不需要发送任何响应实体,只需要发送 HTTP 报头。

OPTIONS

获取服务器所能提供的 HTTP 方法列表。OPTIONS 方法用来探索某个资源所支持的所有 HTTP 方法。对于 OPTIONS 的响应的报头中存在一个 Allow 字段,其中列举了服务器支持的方法名。虽然 HTTP 定义了很多种方法,但是服务器可以根据需求支持部分方法。

PATCH

根据给定的信息修改资源的部分信息,没有提供的关于资源的状态就保持不变。如果只想更新资源的部分信息,然后使用 PUT 发送全部信息就显得有些浪费,这个时候 PATCH 方法可以允许只提供那部分需要更新的内容。

补充

幂等性

常常看到人们说幂等这个词语,那么幂等是什么意思呢?

如果某个 HTTP 方法作用于一个资源一次或多次该资源的状态都是一致的,那么称该操作是幂等的。幂等这个概念出自数学,一个数乘以 0 一次或者多次,结果都是 0 ,同样的一个数乘以 1 一次或者多次,结果都是等于该数本身。对于 GET 方法,它是幂等的,相当于乘以 1 。而对于 DELETE 方法,它也是幂等的,相当于乘以 0。即对多个资源 GET 和 DELETE 多次效果都是一样的。