什么样的HTTP方法是安全的?

如果一个方法不会改变资源的表述,那么这个方法就被认为是安全的。

例如 HTTP GET 和 HTTP HEAD 就被认为是安全的,但需要注意的是,这并不意味着执行GET请求就不会引起其它的资源操作,在表面之下,你的服务层有可能会对其它相关的一些表的数据做出修改,但是本资源的表述不应该被改变。但即使相关的一些数据被修改了,这也不是API消费者所请求的事。

什么样的HTTP方法是幂等的?

如果一个方法执行多次和执行一次的结果(带来的副作用)是一样的话,那么这个方法就被认为是幂等的。

HTTP方法的安全和幂等表:

其中:

  • GET 是安全的也是幂等的,首先它不会改变资源的表述,而且针对某个资源(的URI)执行一次和执行多次GET的结果是一样的,这里的结果是指它带来的副作用,因为GET请求没有副作用,所以执行一次和执行多次的副作用是一样的,也就是都没有副作用。

  • 而 OPTIONS 和 HEAD 的原理和 GET是一样的。

  • POST 既不安全也不幂等,首先它会改变资源的表述,因为 POST 会创建资源,而且如果执行多次 POST 的话,多个资源会被创建。

  • DELETE 也是不安全的,因为它会删除资源,也就是修改了资源的表述。但是 DELETE 却是幂等的,因为对某个资源执行一次删除和执行多次删除的效果是一样的。

  • PUT(整体修改或叫整体替换),它会修改资源所以不是安全的。但是 PUT 却是幂等的,对某个资源执行多次整体修改(或者叫替换)和执行一次的效果是一样的(当然请求body里面的参数每次也要一样)。

  • PATCH(局部更新)既不是安全的也不是幂等的。它会修改资源表述,所以不是安全的。但是为什么它和 PUT 不一样,PATCH 不是幂等的呢?因为 PUT 其实是整体替换,替换多次和一次的效果是一样的,而 PATCH 是针对局部进行修改。比如说公司这个资源有个集合属性叫做员工,而某个 PATCH 请求会往公司的员工集合里添加一个员工,那么执行一次 PATCH 就会添加一个员工,而执行多次 PATCH 会增加多个员工,所以通过这个例子可以看出,PATCH(局部更新)不是幂等的。

HTTP 方法的安全性和幂等性是 HTTP标准文档中的一部分(https://tools.ietf.org/html/rfc7231,https://tools.ietf.org/html/rfc5789)。它们不仅仅是纯理论,它们应该合理的在不同的业务场景中使用。

现在我们都应该知道了为什么 GET 请求不应该用来创建或者修改资源了。。。

使用ASP.NET Core 3.x 构建 RESTful API - 4.3 HTTP 方法的安全性和幂等性相关推荐

  1. 使用ASP.NET Core 3.x 构建 RESTful API - 2. 什么是RESTful API

    1. 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作 什么是REST REST一词最早是在2000年,由Roy Fielding在他的博士论文<Archit ...

  2. 使用ASP.NET Core 3.x 构建 RESTful API - 1. 开始

    以前写过ASP.NET Core 2.x的REST API文章,今年再更新一下到3.0版本. 预备知识:ASP.NET Core 和 C# 工具:Visual Studio 2019最新版(VSCod ...

  3. 使用ASP.NET Core 3.x 构建 RESTful API - 4.2 过滤和搜索

    向Web API传递参数 数据可以通过多种方式来传给API. Binding Source Attributes 会告诉 Model 的绑定引擎从哪里找到绑定源. 共有以下六种 Binding Sou ...

  4. 使用ASP.NET Core 3.x 构建 RESTful API - 3.4 内容协商

    现在,当谈论起 RESTful Web API 的时候,人们总会想到 JSON.但是实际上,JSON 和 RESTful API 没有半毛钱关系,只不过 JSON 恰好是RESTful API 结果的 ...

  5. 使用ASP.NET Core 3.x 构建 RESTful API - 3.1 API资源命名

    为了与RESTful API进行交互,API消费者需要使用到三个概念: 资源的标识.也就是可以找到资源的URI. HTTP方法.例如GET,POST等等,这些方法是HTTP协议的一部分. 有效载荷(可 ...

  6. 使用ASP.NET Core 3.x 构建 RESTful API - 3.3.3 ProblemDetails

    当ASP.NET Core 大约在 2.1 版本的时候,它引入了 ProblemDetails.ProblemDetails是基于 RFC7807 这个规范,目的是让 HTTP 响应可以携带错误的详细 ...

  7. 使用ASP.NET Core 3.x 构建 RESTful API - 3.2 路由

    路由机制会把一个请求的URI映射到一个Controller上面的Action,所以当你发送一个HTTP请求的时候,MVC框架会解析这个请求的URI,并尝试着把它映射到一个Controller上面的Ac ...

  8. 使用ASP.NET Core 3.x 构建 RESTful API - 3.2 开始建立Controller和Action

    Demo 下面我们就来实践一下.打开之前的项目,并建立CompaniesController: 这里有6个地方比较关键,我们挨个看一下: RESTful API 或者其它Web API的Control ...

  9. 使用ASP.NET Core 3.x 构建 RESTful API - 4.1 面向外部的Model

    Entity Framework Core 使用的 Entity Model 是用来表示数据库里面的记录的. 而面向外部的 model 则表示了要传输的东西.这类 model 有时候叫做 Dto,有时 ...

最新文章

  1. 李飞飞高徒Andrej Karpathy用AI撰写内心独白:我的“进化”之路
  2. 计算机科学在生物信息中的应用,生物信息学在基因组学中的应用
  3. JSON.stringify() 格式化 输出log
  4. SSM整合——Spring+SpringMVC+MyBatis整合
  5. Byte Cup 2018机器学习大赛进入冲刺阶段,最全资料帮你快速上手!
  6. 图表达相关书书籍调研
  7. sklearn聚类评价指标
  8. oralce 创建用户和权限
  9. jQuery操作Form表单元素
  10. 控制kvm-qcow2增长空间-(一)
  11. Python学习路线汇总,必看
  12. mac使用Java命令运行Java程序
  13. 分享C#高端视频教程WPF讲座——WPF应用
  14. 详细微信小程序API文档
  15. tbase安全和脱敏
  16. 水果常识大全【图文典藏版】
  17. 关于宋宝华linux驱动学习视频的读后感
  18. 一个k8s集群——跨云服务器部署
  19. 互联网快讯:天猫双11总交易额再创新高;极米投影产品成双十一单品爆款;柔宇科技斩获6亿元大额订单
  20. 2021CCPC河南省赛赛后总结(终于拿金了呜呜呜)

热门文章

  1. 【设计模式】命令模式
  2. hdu 1800 (map)
  3. c#操作excel后关闭excel.exe的方法
  4. informix linux安装步骤
  5. Centos7作为VNCserver,本地使用VNCViewer连接
  6. 导入工程后编译不过,报错: apply plugin: 'com.github.dcendents.android-maven'
  7. linux开机引导过程总览
  8. PostgreSQL 统计信息pg_statistic格式及导入导出dump_stat - 兼容Oracle
  9. 【Linux】IPC-消息队列
  10. 《移动App测试的22条军规》—第1章1.2节移动App的生命周期