REST架构设计是目前非常火热的概念,已经成为构建web服务时应该遵循的事实标准。REST约束中有一条很重要的规则是“无状态”,但“无状态”是个很抽象的概念,对刚刚接触的人来讲,很难深刻形象的理解。今天在网上看了一篇文章,对于“无状态”的解释感觉很容易让人理解,特把文章中相关内容整理了下。

  • "状态"的概念是什么

    一个Web应用程序协议的“状态”在通常指的是为两个相互关联的用户交互操作保留的某种公共信息,它们常常被用来存储工作流或用户状态信息等数据。这些信息可以被指定不同的作用域如page,request,session或全局作用域,而存储他们的责任也同样可以由Client端或Server端负责。

    服务调用过程中有两种“状态”:应用状态(Application State)和资源状态(Resource State)。应用状态指的是与某一特定请求相关的状态信息,而资源状态则反映了某一存储在服务器端资源在某一时刻的特定状态,该状态不会因为用户请求而改变,任何用户在同一时刻对该资源的请求都会获得这一状态的表现(Representation)。RESTful架构要求服务器端不保有任何与特定HTTP请求相关的资源,所以应用状态必须由请求方在请求过程中提供。

    例如session ID可以被认为是一个用来标识某一会话状态的Key,将其传递给服务器端意味着这样一个请求:“请帮我取出这个状态信息”,也就是说这个请求假设响应方保有着状态信息。由于与某一特定请求相关的状态属于应用状态,而RESTful架构要求任何此类状态由请求方负责提供,所以传递Session ID被认为是unRESTful的做法。而用户的身份凭证信息作为一种应用状态,是被期望由请求方提供的,所以在请求中传递用户的身份凭证信息是符合RESTful架构规范的。

  • 为什么要使用无状态的架构

    虽然存储状态为企业软件开发带来了诸多便利,但是它也给分布式系统的其他方面带来了许多限制,比如在负载均衡方面,在有状态的模式下,一个用户的请求必须被提交到保存有其相关状态信息的服务器上,否则这些请求可能无法被理解,这也就意味着在此模式下服务器端无法对用户请求进行自由调度。于此相关的另一个问题是容错性,倘若保有用户信息的服务器宕机,那么该用户最近的所有交互操作将无法被透明地移送至备用服务器上,除非该服务器时刻与主服务器同步全部用户的状态信息。此外,由于HTTP本身不是一个有状态的协议,开发人员必须通过模拟实现状态的钝化与激活等。于是为了克服这些不足,无状态(Statelessness)架构风格属性受到了广泛关注。

  • 无状态即各自维护自身的状态,如会话信息都在客户端,服务端并不保存状态信息,那么我们可以说服务端是无状态的,这个的好处是显而易见的,无状态的部分可以很方便的被替换掉(或集群、横向扩展)而不用状态重建(或同步),大大提高了可申缩性(scalability);通常J2EE的session被认是不好的设计,大部份J2EE中间件在集群时都需要进行session同步,而Play!并非基于J2EE体系设计的,则没有该烦恼!

Web中的无状态含义的更多相关文章

  1. react 中的无状态函数式组件

    无状态函数式组件,顾名思义,无状态,也就是你无法使用State,也无法使用组件的生命周期方法,这就决定了函数组件都是展示性组件,接收Props,渲染DOM,而不关注其他逻辑. 其实无状态函数式组件也是 ...

  2. Blazor中的无状态组件

    声明:本文将RenderFragment称之为组件DOM树或者是组件DOM节点,将*.razor称之为组件. 1. 什么是无状态组件 如果了解React,那就应该清楚,React中存在着一种组件,它只 ...

  3. 无状态Web应用集成——《跟我学Shiro》

    http://www.tuicool.com/articles/iu2qEf 在一些环境中,可能需要把Web应用做成无状态的,即服务器端无状态,就是说服务器端不会存储像会话这种东西,而是每次请求时带上 ...

  4. 无状态、REST、RESTful 和 Web Services【整理】

    在理解 OpenStack 的过程中,常常遇到 REST 这个概念,现从各处搜罗如下: 对 Web Service 的理解: Web 服务有点像对计算机友好的网页,基于让程序可以跨网络交换信息的标准和 ...

  5. 第二十章 无状态Web应用集成——《跟我学Shiro》

    目录贴:跟我学Shiro目录贴 在一些环境中,可能需要把Web应用做成无状态的,即服务器端无状态,就是说服务器端不会存储像会话这种东西,而是每次请求时带上相应的用户名进行登录.如一些REST风格的AP ...

  6. Shiro学习(20)无状态Web应用集成

    在一些环境中,可能需要把Web应用做成无状态的,即服务器端无状态,就是说服务器端不会存储像会话这种东西,而是每次请求时带上相应的用户名进行登录.如一些REST风格的API,如果不使用OAuth2协议, ...

  7. http的无状态无连接

    搞爬虫的核心:http协议. 在理解http中的无状态和无连接时,有一些困惑,下文可以解决. 转自:http://www.cnblogs.com/bellkosmos/p/5237146.html h ...

  8. 有状态 Vs 无状态

    NET Core 分布式框架 公司物联网项目集成Orleans以支持高并发的分布式业务,对于Orleans也是第一次接触,本文就分享下个人对Orleans的理解. 这里先抛出自己的观点:Orleans ...

  9. RestFul的无状态规则详解

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

随机推荐

  1. Leetcode:Unique Binary Search Trees & Unique Binary Search Trees II

    Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that st ...

  2. DeviceIoControl方式 sys和exe通信

        常识: IRP:I/O Request Package  即输入输出请求包 exe和sys通信时,exe会发出I/O请求.操作系统会将I/O请求转化为相应的IRP数据, 不同类型传递到不同的d ...

  3. 虚拟化平台cloudstack新版本的调试

    虚拟化平台cloudstack(7)——新版本的调试 调试环境 ubuntu 12.04 JDK1.7 apache-maven-3.10 eclipse 4.2 Juno mysql 5 源码下载及 ...

  4. Cocoa框架

    Cocoa提供了用于存放数字和字符串的通用数据类型的实际的类.非正式地可以将这些称为值类或基本值类. Cocoa框架本身封装了三个独立的框架:Foundation基本框架.AppKit框架和核心数据框 ...

  5. tornado + supervisor + nginx + linux 亲身体验

    先说说思路 一.安装这些东西,tornado, supervisor( sudo pip install supervisor  在linux 系统上), 安装 nginx  (sudo apt-ge ...

  6. PHP 数组拼接成字符串

    PHP[知识分享] 数组拼接成字符串 <?php // 格式: [二维数组] Array ( [0] => Array ( [topicid] => 1 ) [1] => Ar ...

  7. HDU 1880 字符串hash 入门题

    Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔 ...

  8. Android屏幕适配问题详解

    上篇-Android本地化资源目录详解 :http://www.cnblogs.com/steffen/p/3833048.html 单位: px(像素):屏幕上的点. in(英寸):长度单位. mm ...

  9. java foreach实现原理

    在平时Java程序中,应用比较多的就是对Collection集合类的foreach遍历,foreach之所以能工作,是因为这些集合类都实现了Iterable接口,该接口中定义了Iterator迭代器的 ...

  10. mybatis中updateByPrimaryKeySelective

    mybatis中updateByPrimaryKeySelective等选择性操作在判断时对于VARCHAR类型需要同时判断非空和非空串 <if test="description ! ...