GET操作是安全的。所谓安全是指不管进行多少次操作,资源的状态都不会改变。比如我用GET浏览文章,不管浏览多少次,那篇文章还在那,没有变化。当然,你可能说每浏览一次文章,文章的浏览数就加一,这不也改变了资源的状态么?这并不矛盾,因为这个改变不是GET操作引起的,而是用户自己设定的服务端逻辑造成的。
PUT,DELETE操作是幂等的。所谓幂等是指不管进行多少次操作,结果都一样。比如我用PUT修改一篇文章,然后在做同样的操作,每次操作后的结果并没有不同,DELETE也是一样。顺便说一句,因为GET操作是安全的,所以它自然也是幂等的。
POST操作既不是安全的,也不是幂等的,比如常见的POST重复加载问题:当我们多次发出同样的POST请求后,其结果是创建出了若干的资源。
安全和幂等的意义在于:当操作没有达到预期的目标时,我们可以不停的重试,而不会对资源产生副作用。从这个意义上说,POST操作往往是有害的,但很多时候我们还是不得不使用它。
还有一点需要注意的就是,创建操作可以使用POST,也可以使用PUT,区别在于POST 是作用在一个集合资源之上的(/uri),而PUT操作是作用在一个具体资源之上的(/uri/xxx),再通俗点说,如果URL可以在客户端确定,那么就使用PUT,如果是在服务端确定,那么就使用POST,比如说很多资源使用数据库自增主键作为标识信息,而创建的资源的标识信息到底是什么只能由服务端提供,这个时候就必须使用POST。
# HTTP动词下,响应的HTTP状态码其含义的典型用法:
## 所有动词通用的响应状态码,后面的就不一一列出了。
* 202 Accepted - 表示一个请求已经进入后台排队(异步任务)
* 401 Unauthorized - 表示用户没有权限(令牌、用户名、密码错误)。
* 403 Forbidden - 表示用户得到授权(与401错误相对),但是访问是被禁止的。
* 404 NOT FOUND - 用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
* 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
## GET
* 安全且幂等
* 获取表示
* 变更时获取表示(缓存)
* 200(OK) - 表示已在响应中发出
* 204(无内容) - 资源有空表示
* 301(Moved Permanently) - 资源的URI已被更新
* 303(See Other) - 其他(如,负载均衡)
* 304(not modified)- 资源未更改(缓存)
* 400 (bad request)- 指代坏请求(如,参数错误)
* 404 (not found)- 资源不存在
* 406 (not acceptable)- 服务端不支持所需表示
* 500 (internal server error)- 通用错误响应
* 503 (Service Unavailable)- 服务端当前无法处理请求
## POST
* 不安全且不幂等
* 使用服务端管理的(自动产生)的实例号创建资源
* 创建子资源
* 部分更新资源
* 如果没有被修改,则不过更新资源(乐观锁)
* 200(OK)- 如果现有资源已被更改
* 201(created)- 如果新资源被创建
* 202(accepted)- 已接受处理请求但尚未完成(异步处理)
* 301(Moved Permanently)- 资源的URI被更新
* 303(See Other)- 其他(如,负载均衡)
* 400(bad request)- 指代坏请求
* 404 (not found)- 资源不存在
* 406 (not acceptable)- 服务端不支持所需表示
* 409 (conflict)- 通用冲突
* 412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)
* 415 (unsupported media type)- 接受到的表示不受支持
* 500 (internal server error)- 通用错误响应
* 503 (Service Unavailable)- 服务当前无法处理请求
## PUT
* * *
* 不安全但幂等
* 用客户端管理的实例号创建一个资源
* 通过替换的方式更新资源
* 如果未被修改,则更新资源(乐观锁)
* 200 (OK)- 如果已存在资源被更改
* 201 (created)- 如果新资源被创建
* 301(Moved Permanently)- 资源的URI已更改
* 303 (See Other)- 其他(如,负载均衡)
* 400 (bad request)- 指代坏请求
* 404 (not found)- 资源不存在
* 406 (not acceptable)- 服务端不支持所需表示
* 409 (conflict)- 通用冲突
* 412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)
* 415 (unsupported media type)- 接受到的表示不受支持
* 500 (internal server error)- 通用错误响应
* 503 (Service Unavailable)- 服务当前无法处理请求
## DELETE
* 不安全但幂等
* 删除资源
* 200 (OK) - 删除成功,同时返回已经删除的资源
* 202 (Accepted) - 删除请求已经接受,但没有被立即执行(资源也许已经被转移到了待删除区域)
* 204 (No Content) - 删除请求已经被执行,但是没有返回资源(也许是请求删除不存在的资源造成的)
* 301 (Moved Permanently)- 资源的URI已更改
* 303 (See Other)- 其他,如负载均衡
* 400 (bad request)- 指代坏请求
* 404 (not found)- 资源不存在
* 409 (conflict)- 通用冲突
* 500 (internal server error)- 通用错误响应
* 503 (Service Unavailable)- 服务端当前无法处理请求
- 关于我
- nginx
- 代理
- 实例1
- 使用Nginx实现反向代理
- nginx反向代理配置
- Nginx缓存原理及配置
- nginx 信号集
- rewrite
- nginx rewrite规则
- nginx rewrite 正则规则详解
- nginx+php-fpm fastcgi防止跨站、跨目录的安全设置
- 写了个shell脚本,实现nginx日志自动切割,并利用goaccess分析成HTML报表,然后通知管理人员查阅
- nginx禁止一些常见的不应该让用户访问的文件
- PHP
- 实现PHP多进程管理
- php代码规范
- PHP性能优化
- PHP结构优化大全
- PHP编码规范
- 常见的PHP安全性攻击
- Linux
- 常用命令
- scp
- touch
- nohup
- rsync
- ssh命令 远程登录
- chmod
- nginx日志切割脚本
- Linux使用ssh公钥实现免密码登录Linux
- 使用ssh公钥密钥自动登陆linux服务器
- Linux查看程序端口占用情况
- ssh 公钥私钥认证原理
- 路由图
- CentOS7防火墙设置
- linux下用户管理
- Linux 服务器安全技巧
- Linux shell 提取文件名和目录名
- Linux环境下设置命令别名(alias)
- Git
- 搭建Git服务器
- 手把手教你搭建git服务器
- Git 基本操作
- git删除文件夹/文件(不删除本地文件)
- git忽略文件和文件夹以及文件权限
- Git的四个区五种状态
- git init 和 git init --bare 的区别
- git仓库删除所有提交历史记录,成为一个干净的新仓库
- 如何正确使用Git Flow
- HTTP
- 前端跨域解决方案
- HTTP基本概念
- Redis
- Redis 数据类型及应用场景
- JavaScript
- WebSocket探秘
- socket与websocket的区别
- 基于 Swoole 的微信扫码登录
- Web前端开发规范手册
- 简单的学习了一下ES6
- ES6模块的import和export用法
- MySql
- MySql重置root密码的方法
- mysql 5.6.30 开启慢查询日志
- mysql查看锁表情况
- 我的设计稿
- 会计出纳系统
- 上门宝ERP系统
- 社交应用七大需求
- 出纳系统
- 利用SdfMpp搭建中大行软件系统
- B2C库存商品系统
- 软件
- 网上商城
- 思维逻辑
- 系统架构分层图
- 代码检查规范
- 研发计划
- 系统架构
- 我设计的架构架构图
- 电商网站架构案例
- 大型网站架构
- 服务熔断、降级、限流、异步RPC
- 软件版本号规范
- 第三方服务引擎
- kafka
- ElasticSearch
- 阿里云 推荐引擎
- 随记
- 人生最大的投资
- 产品研发团队管理的6个方面
- 我感觉自己根本不是一个创业者,更谈不上企业家,果然还是屌丝这个称呼更适合我。
- 学什么语音都应该养成的编程习惯
- 2018年5月23日 多云转阴 15-24°C 离职信
- 2017年12月25日
- 对“目标”的认知
- 个人简历
- API设计
- 理解OAuth 2.0
- OAuth 2.0四种授权方式小结
- 对 REST 的理解
- RESTful API 设计指南
- RESTful API 设计
- RPC
- 微服务架构方案
- SOA
- 理解RESTful架构
- RESTful API GET,DELETE,PUT和POST的响应状态码
- MongoDB
- MongoDB-无法启动的一个问题