【Http】HTTP方法的安全性和幂等性

Http协议规定了不同方法的安全特性和幂等特性,作为服务提供者的服务器必需为客户端提供这些特性。

安全性

仅指方法的多次调用不会产生副作用,不涉及传统意义上的“安全”,这里的副作用是指资源状态。即,安全的方法不会修改资源状态,尽管多次调用的返回值可能不一样(被其他非安全方法修改过)。

幂等性

指该方法多次调用返回的效果(形式)一致,客户端可以重复调用并且期望同样的结果。幂等的含义类似于编程语言的setter,一次调用和多次调用产生的效果是一致的,都是对一个变量进行赋值。安全性和幂等性含义有些接近,容易搞混。

HTTP方法的安全性和幂等性见下表:

方法名安全性幂等性
GET
HEAD
OPTIONS
DELETE
PUT
POST

可以认为安全的方法都是只读的方法(GET、HEAD、OPTIONS),不会改变资源状态,显然,这三个方法也是幂等。
DELETE方法的语义表示删除服务器上一个资源,第一次删除成功后该资源就不存在了,资源状态改变了,所以DELETE方法不具备安全特性。然而HTTP协议规定DELETE方法是幂等,每次删除该资源都要返回状态码200 OK,服务器端要实现幂等的DELETE方法,必须记录所有已删除资源的元数据(Metadata),否则,第二次删除后返回的响应码就会类似404 Not Found了。

PUT 和POST方法语义中都有修改资源状态的意思,因此都不是安全。但是PUT方法是幂等的,POST方法不是幂等的,这么设计的理由是:
HTTP协议规定,POST方法修改资源状态时,URL指示的是该资源的父级资源,待修改资源的ID在请求中携带。而PUT方法修改资源状态时,URL直接指示待修改资源。因此,同样是创建资源,重复提交POST请求可能产生两个不同的资源,而重复提交PUT请求只会对其URL中指定的资源起作用,也就是只会创建一个资源。

参考:https://www.cnblogs.com/jinks/p/3511282.html
http://fengchangjian.com
http://fengchangjian.com/?p=1653
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值