HTTP 常见方法语义

发表于: 2016-04-28分类于:网络

最近做 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 字段,其中列举了一系列方法名。

PATCH

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

补充

幂等性

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

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