目录

  • 目录
  • 前言
  • 无状态原则
    • Web服务的状态
    • 基于状态的Web服务
    • 基于无状态的Web服务
    • 总结两者的区别

前言

在上篇RESTful基础知识中整体的介绍了RESTful架构设计思想的框架,在往后的RESTful主题博文中,我们在这个框架的基础上不断的为其填充更加深入的知识材料。
RESTful基础知识,传送门:http://blog.csdn.net/jmilk/article/details/50452595

无状态原则

Statelessness:无状态原则是RESTful架构设计中一个非常重要的原则,无状态是相对于有状态而言的。在理解什么是无状态的交互请求之前,首先我们需要了解什么是有状态,并对两者进行比较以加深认识。

Web服务的状态

Web服务建立在Web应用程序的协议之上,如:HTTP协议。Web服务的状态指的是请求的状态,而不是资源的状态。是两个关联用户(Client与Server)进行交互操作时所留下来的公共信息(工作流、用户状态信息等数据)。这些信息可以被指定在不同的作用域中,如:page、request、session、application或全局作用域,一般由Server中的Session来保存这些信息。

基于状态的Web服务

在基于状态的Web服务中,Client与Server交互的信息(如:用户登录状态)会保存在Server的Session中。再这样的前提下,Client中的用户请求只能被保存有此用户相关状态信息的服务器所接受和理解,这也就意味着在基于状态的Web系统中的Server无法对用户请求进行负载均衡等自由的调度(一个Client请求只能由一个指定的Server处理)。同时这也会导致另外一个容错性的问题,如果指定的Server在Client的用户发出请求的过程中宕机,那么此用户最近的所有交互操作将无法被转移至别的Server上,即此请求将无效化。

基于无状态的Web服务

在无状态的Web服务中,每一个Web请求都必须是独立的,请求之间是完全分离的。Server没有保存Client的状态信息,所以Client发送的请求必须包含有能够让服务器理解请求的全部信息,包括自己的状态信息。使得一个Client的Web请求能够被任何可用的Server应答,从而将Web系统扩展到大量的Client中。

总结两者的区别

因为无状态原则的特性,让RESTful在分布式系统中得到了广泛的应用,它改善了分布式系统的可见性、可靠性以及可伸缩性,同时有效的降低了Client与Server之间的交互延迟。无状态的请求有利于实现负载均衡,在分布式web系统下,有多个可的Server,每个Server都可以处理Client发送的请求。有状态的请求的状态信息只保存在第一次接收请求的Server上,所以后来同一个Client的请求都只能由这台Server来处理,Server无法自由调度请求。无状态请求则完全没有这个限制。其次,无状态请求有较强的容错性和可伸缩性。如果一台服务器宕机,无状态请求可以透明地交由另一台可用Server来处理,而有状态的请求则会因为存储请求状态信息的Server宕机而承担状态丢失的风险。Restful风格的无状态约束要求Server不保存请求状态,如果确实需要维持用户状态,也应由Client负责。例如:
使用Cookies通过客户端保持登陆状态
在REST中,每一个对象都是通过URL来表示,对象用户负责将状态信息打包进每一条信息内,保证对象的处理总是无状态的。在HTTP服务器中,服务器没有保存客户端的状态信息,客户端必须每次都带上自己的状态去请求服务器。客户端以URL形式提交的请求包含了cookies等带状态的数据,这些数据完全指定了所需的登录信息,而不需要其他请求的上下文或内存。
传递User credentials是Restful,而传递SessionID是Un-Restful的,因为session信息保存在服务器端。
无状态请求:Server不保存任何请求状态信息,Client的每一个请求都具有User credentials等所需要的全部信息,所以能被任意可用的Server应答。
有状态请求:Server保存了Client的请求状态,Server会通过Client传递的SessionID在Server中的Session作用域找到之前交互的信息,并以此来实现应答。所以Client只能由某一个Server来应答。

深入RESTful无状态原则相关推荐

  1. oauth1+jwt无状态登录策略分析

    1.该版本的登录采用的是oauth1+jwt无状态登录策略 2.存在的问题     1)同一用户可以在不同的地点同时登陆     2)token的过期时间设置为1天,在一天内连续多次登陆,会生成多个不 ...

  2. RESTful Web 服务 - 无状态

    根据 REST 架构,一个 RESTful Web 服务不应该在服务器上保持客户端状态.这种约束被称为无状态.客户端的职责是传递其上下文给服务器,然后服务器存储这个上下文以处理客户端的请求.比如,由服 ...

  3. 服务器如何验证jwt,RESTful API使用JWT做无状态的身份认证-Go语言中文社区

    JWT设计 RESTful架构的前后端,天然要求API是无状态的,JWT(JSON Web Token)简单易用,适合在分布式系统中做API无状态的身份认证. jwt由Header.Payload.S ...

  4. RESTful API无状态理解

    RESTful API无状态的理解 1. 传统会话 2. RESTFUL 参考链接 1. 传统会话 传统web应用程序使用远程会话.在这种方法中,应用状态完全保存在服务器上.远程会话样式是客户机-服务 ...

  5. 无状态逻辑服务器,无状态 | RESTful API 中文网

    无状态 根据REST(REpresentational "State" Transfer)体系结构,服务器不会在服务器端存储有关客户端会话的任何状态.这种限制称为无状态.从客户端到 ...

  6. REST无状态风格的理解

    推荐一篇博文 ,这个介绍的很详细,很好理解(点击跳转) "Statelessness" 是restful风格最重要的原则. 它的含义是指,客户端和服务器交互的过程中(各次请求之间) ...

  7. 如果REST应用程序应该是无状态的,那么如何管理会话?

    我需要一些澄清. 我一直在阅读有关REST和构建RESTful应用程序的内容. 根据维基百科,REST本身被定义为具象国家转移 . 因此,我不理解每个人都在喷涌的所有这种无国籍的gobbledeygo ...

  8. spring 中属性scope 的prototype(有状态)和singleton(无状态)

    默认情况下,从bean工厂所取得的实例为Singleton(bean的singleton属性) Singleton: Spring容器只存在一个共享的bean实例, 默认的配置. Prototype: ...

  9. csrf spring_无状态Spring安全性第1部分:无状态CSRF保护

    csrf spring 如今,随着RESTful架构变得越来越标准,可能值得花一些时间重新考虑当前的安全方法. 在这一小系列博客文章中,我们将探索以无状态方式解决与Web相关的安全性问题的几种相对较新 ...

最新文章

  1. 如何在同一系统里同时启动多个Tomcat
  2. 深入浅出Spring Security(二):FilterChainProxy的创建过程
  3. 简述计算机配件选购原则,计算机专业理论期末考试试题
  4. 读书狂想之《穷爸爸,富爸爸》财富观
  5. php 预处理原理,PHP的PDO对象预处理的2种实现方法,实现原理详解
  6. RedHat 7.2配置本地yum源
  7. python函数修饰器_Python函数装饰器指南
  8. 最简单java设计模式:抽象工厂模式
  9. SAP 参照sto订单创建外向交货BAPI
  10. SAP Cloud for Customer的work center显示逻辑
  11. 时间转化_Excel常见时间日期函数全讲解,10个函数教你如何进行日期转化
  12. datagridview如何将sqlite实现多表查询_服气!月薪3W的Exceler,居然是这样合并多表数据的...
  13. 优先级反转实验,使用信号量实现【RT-Thread学习笔记 5】
  14. @spoj - lcs2@ Longest Common Substring II
  15. 清华大学计算机专业在职博士吧,清华大学在职博士含金量高吗?
  16. hd获取硬盘序列号_获取硬盘序列号
  17. Python——click模块
  18. wps中vbe6ext.olb不能被加载问题(附WPS2019宏下载)
  19. WP 微信导出聊天记录备份到电脑
  20. java简单的音乐播放器编程_简单实现java音乐播放器

热门文章

  1. vue 解决跨域 调试_Electron-vue解决跨域
  2. springboot 创建地址_手把手教你Spring Boot入门开发
  3. java 可控异常_java异常处理,重新认识java异常,java7异常处理的新特性!
  4. win32api.keybd_event 怎么输入中文_6个输入法高效使用技巧,你知道几个?
  5. ICA处理脑电资料汇总
  6. 日本3D打印最贵牛肉!人工组装肌肉脂肪和血管,两天即完成,网友:赛博朋克的仿制肉...
  7. Arm官宣V9架构,用AI和安全对抗英特尔,最快今年年底用上
  8. 召集最强的智,昇腾计算产业射出一支「穿云箭」
  9. 谁是李党生?带领中国本土期刊登上国际C位,施一公说他眼光很毒辣
  10. 23年前的今天,首辆火星车登陆火星,后来还拯救了马特达蒙