HTTP方法的安全性和幂等性

Http协议规定了不同方法的安全特性和幂等特性,作为服务提供者的服务器必需为客户端提供这些特性。安全性,仅指该方法的多次调用不会产生副作用,不涉及传统意义上的“安全”,这里的副作用是指资源状态。即,安全的方法不会修改资源状态,尽管多次调用的返回值可能不一样(被其他非安全方法修改过)。幂等性,是指该方法多次调用返回的效果(形式)一致,客户端可以重复调用并且期望同样的结果。幂等的含义类似于编程语言中的setter方法[1],一次调用和多次调用产生的效果是一致的,都是对一个变量进行赋值。安全性和幂等性含义有些接近,容易搞混。

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

方法名

安全性

幂等性

 

GET

请求指定的页面信息,并返回实体主体

HEAD

只请求页面的首部

OPTIONS

允许客户端查看服务器的性能

DELETE

请求服务器删除指定的页面

PUT

从客户端向服务器传送的数据取代指定的文档的内容

POST

请求服务器接受所指定的文档作为对所标识的URI的新的从属实体

1)安全的意味着该操作用于获取信息而非修改信息。换句话说,请求一般不应产生副作用。

2)幂等的意味着对同一 URL 的多个请求应该返回同样的结果。

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

可以认为安全的方法都是只读的方法(GET, HEAD, OPTIONS),不会改变资源状态,显然,这三个方法也是幂等的。

PUT和POST方法语义中都有修改资源状态的意思,因此都不是安全的。但是PUT方法是幂等的,POST方法不是幂等的,这么设计的理由是:

HTTP协议规定,POST方法修改资源状态时,URL指示的是该资源的父级资源,待修改资源的ID信息在请求体中携带[2]。而PUT方法修改资源状态时,URL直接指示待修改资源[2]。因此,同样是创建资源,重复提交POST请求可能产生两个不同的资源,而重复提交PUT请求只会对其URL中指定的资源起作用,也就是只会创建一个资源。

References:
[1] Subbu Allamaraju著, 丁雪丰等译. RESTful Web Services Cookbook中文版. 电子工业出版社.
[2] Hypertext Transfer Protocol — HTTP/1.1. Method Definitions: POST [1]
[3] Hypertext Transfer Protocol — HTTP/1.1. Method Definitions: PUT [2]

–EOF–

HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。根据 HTTP 规范,GET 用于信息获取,而且应该是 安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。 比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解);

在表单里使用”post”和”get”有什么区别 
在FORM提交的时候,如果不指定Method,则默认为GET请 求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为 该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中; 
GET方式提交的数据最多只能有1024字节,而POST则没有此限制。

在Form里面,可以使用post也可以使用get。它们都是method的合法取值。但是,post和get方法在使用上至少有两点不同: 
1、Get方法通过URL请求来传递用户的输入。Post方法通过另外的形式。 
2、Get方式的提交你需要用Request.QueryString来取得变量的值,而Post方式提交时,你必须通过Request.Form来访问提交的内容。

当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出: 
① 客户方错误 
100  继续 
101  交换协议 
② 成功 
200  OK 
201  已创建 
202  接收 
203  非认证信息 
204  无内容 
205  重置内容 
206  部分内容 
③ 重定向 
300  多路选择 
301  永久转移 
302  暂时转移 
303  参见其它 
304  未修改(Not Modified) 
305  使用代理 
④ 客户方错误 
400  错误请求(Bad Request) 
401  未认证 
402  需要付费 
403  禁止(Forbidden) 
404  未找到(Not Found) 
405  方法不允许 
406  不接受 
407  需要代理认证 
408  请求超时 
409  冲突 
410  失败 
411  需要长度 
412  条件失败 
413  请求实体太大 
414  请求URI太长 
415  不支持媒体类型 
⑤ 服务器错误 
500  服务器内部错误 
501  未实现(Not Implemented) 
502  网关失败 
504  网关超时 
505 HTTP版本不支持

文章参考:http://www.cnblogs.com/jinks/p/3511282.html

http://ymiter.iteye.com/blog/1922464

HTTP方法的安全性和幂等性相关推荐

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

    什么样的HTTP方法是安全的? 如果一个方法不会改变资源的表述,那么这个方法就被认为是安全的. 例如 HTTP GET 和 HTTP HEAD 就被认为是安全的,但需要注意的是,这并不意味着执行GET ...

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

    Http协议规定了不同方法的安全特性和幂等特性,作为服务提供者的服务器必需为客户端提供这些特性. 安全性 仅指方法的多次调用不会产生副作用,不涉及传统意义上的"安全",这里的副作用 ...

  3. http 安全性和幂等性_HTTP方法:幂等性和安全性

    http 安全性和幂等性 幂等性和安全性是HTTP方法的属性. HTTP RFC定义了这些属性,并告诉我们哪些HTTP方法是安全且幂等的. 服务器应用程序应确保正确执行安全和幂等的语义,如客户端期望的 ...

  4. 网络爬虫学习3 - Requests库的七个主要方法、安全性问题与异常处理、反爬虫和Robots协议

    网络爬虫MOOC学习打卡 - 第三天 文章目录 网络爬虫MOOC学习打卡 - 第三天 一.Requests库主要方法解析 0.Requests库的七个主要方法 1.request()方法request ...

  5. HTTP协议漫谈 - HTTP协议请求方法

    前言 在上一篇文章<HTTP协议漫谈 - HTTP协议历史和报文结构>中介绍了HTTP协议的历史和版本变化,以及HTTP协议报文的总体结构. 按照HTTP/1.1 RFC文档中的定义,HT ...

  6. 花5分钟看这篇之前,你才发现你不懂RESTful

    前言 在学习RESTful 风格接口之前,即使你不知道它是什么,但你肯定会好奇它能解决什么问题?有什么应用场景?听完下面描述我想你就会明白: 在互联网并没有完全流行的初期,移动端也没有那么盛行,页面请 ...

  7. 花五分钟看这篇之前,你才发现你不懂RESTful

    原创公众号(希望能支持一下):bigsai 转载请联系bigsai 文章收藏在回车课堂 和github 前言 在学习RESTful 风格接口之前,即使你不知道它是什么,但你肯定会好奇它能解决什么问题? ...

  8. ASP.NETCore编程实现基本认证

    HTTP基本认证 在HTTP中,HTTP基本认证(Basic Authentication)是一种允许浏览器或其他客户端程序使用(用户名,口令)请求资源的身份验证方式,不要求cookie,sessio ...

  9. restful api接口设计

    技术由来: 互联网早期,页面请求和并发量不高,且移动端未盛行时对接口要求不高,使用动态页面(jsp)就能满足绝大多数的使用需求.但是随着互联网和移动设备的发展,人们对Web应用的使用需求也增加,传统的 ...

最新文章

  1. 从功能测试到性能测试的转型之路
  2. 苹果手机视频传输教程-通过无线将电脑上视频传到手机
  3. maven打包jar单独配置log4j.properites文件记录日志
  4. bzoj1193 [HNOI2006]马步距离 构造+枚举
  5. Nodejs抓取非utf8字符编码的页面
  6. fgo服务器维护抽卡,FGO国服最佳抽卡时间推荐,玄学或许能让你脱非入欧!
  7. ImportError: DLL load failed while importing Qsci
  8. 外贸常用术语_常用外贸术语大全
  9. RK3399安卓改linux,RK3399 Type-C改为MicroUSB
  10. 异步编程之 Isolate
  11. 都2022年你还不会安装系统?看我三分钟完事PE制作并进行Win11系统安装实践
  12. 如何通过划分VLAN,有效规划企业网ip地址!
  13. 为此计算机上所有用户安装此加载项,win7打开特定网站提示“控件无法安装,windows已阻止此软件因为无法验证发行者”怎么办...
  14. Linux 下的 3D 设计软件-FreeCAD
  15. 北京市工作居住证办理一小保险
  16. 点投影到平面上的方法总结
  17. 敬业福朋友有你也可以有 区块链做到有福同享
  18. Vue 中 store 基本用法
  19. 【matlab数字图像处理】 uint8和double类型
  20. 程序员除了会CRUD之外,还应该知道什么叫CQRS!

热门文章

  1. vue双向绑定原理及实现
  2. uni-app分享小程序页面给微信好友;小程序分享无效原因;小程序分享失败原因;
  3. itoa()和atoi()函数详解
  4. 欧式距离和曼哈顿距离的比较
  5. 基于thinkphp5的开源cms
  6. PHP实现简单计算器
  7. 常见物联网近距离无线通信技术解析
  8. NullPointerException 没有堆栈
  9. logout命令详解
  10. C语言基础习题及答案7