无状态指的是任意一个Web请求必须完全与其他请求隔离,当请求端提出请求时,请求本身包含了相应端为相应这一请求所需的全部信息。
那么对于用户来说,怎么感觉的有状态与无状态的差别呢。简单的方法是浏览器的后退按钮,如果一个网站期望用户以A->B->C的流程来交互,而在执行至B时回退的话,那么系统很有可能不是按照其所期望的方式运行,因为用户的状态可能被不可逆地修改了。反过来,搜索引擎(我指的是普通意义上的搜索引擎,而不是根据用户搜索历史个性化了的)是一个无状态架构的范例。任何用户可以在浏览器地址栏中输入http://www.google.com/search?q=RESTful&start=100来获得从第一百条开始的关于RESTful的记录,并且当Google摩洛哥服务器瘫痪时,相关用户请求会被透明地移送至其他服务器。
RESTful架构对于state的两个不同的解释: 应用状态(Application State)和资源状态(Resource State)。应用状态指的是与某一特定请求相关的状态信息,而资源状态则反映了某一存储在服务器端资源在某一时刻的特定状态,该状态不会因为用户请求而改变,任何用户在同一时刻对该资源的请求都会获得这一状态的表现(Representation)。RESTful架构要求服务器端不保有任何与特定HTTP请求相关的资源,所以应用状态必须由请求方在请求过程中提供。那么再回到那个邮件列表中的问题,为什么传递一个session ID是违背REST架构风格而传递user credentials却不是。我想作者的疑惑源于他没有分清什么是有状态和无状态的架构属性,而认为“传递某种表示状态的信息”到服务器便是“有状态”的表现。其实有状态和无状态与请求本身没有多大关联,重要的是状态信息是由请求方还是响应方负责保存。在Session ID可以被认为是一个用来标识某一会话状态的Key,将其传递给服务器端意味着这样一个请求:“请帮我取出这个状态信息”,也就是说这个请求假设响应方保有着状态信息。由于与某一特定请求相关的状态属于应用状态,而RESTful架构要求任何此类状态由请求方负责提供,所以传递Session ID被认为是unRESTful的做法。反过来,user credential作为一种应用状态,是被期望由请求方提供的,所以在请求中传递user credentials(姑且忽略安全性问题)是符合RESTful架构规范的。
分享到:
相关推荐
无状态认证(Stateless Authentication)是OAuth 2.0和JWT(JSON Web Token)等现代认证机制的基础。在这种模式下,服务器不保存会话状态,每次请求都包含足够的信息来验证用户身份。例如,Sureness支持JWT,用户...
服务器响应时,仅返回状态变化的结果,不保存客户端的任何状态信息,实现无状态(Stateless)通信。 5. **轻量级(Lightweight)**:REST使用简单的HTTP协议,降低了客户端和服务器之间的复杂性,使得系统更加灵活...
最初开始接触web service的时候,所有的材料上来就是一大堆的名词,SOAP, WSDL,看得头都要大了,后来提出来的REST就容易理解得多,虽然目前SOAP在企业级的web service中还有一席之地,但是在公共的Internet上,不是...
- 无状态(Stateless):每次请求都包含所有必要的信息,服务器不保存任何会话状态。 - 缓存(Cacheable):允许客户端缓存响应,提高性能。 - 层次化系统:服务器可以内嵌子资源,客户端无需关心层次结构。 - ...
6. **无状态(Stateless)**:每个请求都应该包含处理请求所需的所有信息,服务器不保存任何会话状态。 7. **缓存机制(Cache)**:REST支持客户端缓存,通过HTTP缓存头(如Cache-Control、ETag等)来控制。 ...
在IT行业中,REST(Representational State Transfer)是一种广泛应用于网络应用程序设计的架构风格,它强调了服务端和客户端之间的简洁、无状态、可缓存的交互。本项目"RestPractice2"显然是一个针对REST API设计的...
- **无状态(Stateless)**: 每个请求都包含所有必要的信息,服务器不保存客户端状态。 - **缓存(Cache)**: 支持客户端缓存响应,提高性能。 - **层式系统(Layered System)**: 允许中间层如代理、网关和负载...
2. 无状态 (Stateless): 无状态约束意味着每次客户端发起请求时,都必须包含完成该请求所需的所有信息。服务器不保存任何关于客户端会话的状态,从而可以更容易地扩展,因为新增的服务器不需要知道其他服务器上的...
1. **无状态**(Stateless): 每次请求必须包含理解请求所需的所有信息。服务器不能存储任何客户端的状态信息。这种特性使得REST系统能够轻松地处理高并发请求,并且更容易扩展。 2. **客户端-服务器模型**(Client...
1. **无状态(Stateless)**: 每次请求都包含处理请求所需的所有信息,服务器不保存任何会话状态。这使得服务器可以更易于扩展,因为每个请求都可以独立处理,不需要依赖于之前的请求。 2. **缓存(Cache)**: 允许...
3. **无状态(Stateless)**:每个请求都包含所有必要的信息,服务器不需要保存任何客户端会话状态。这意味着服务器可以快速地处理请求,不需要存储额外的上下文信息,降低了系统的复杂性。 4. **可缓存(Cacheable...
3. 所有的操作都是无状态的 REST 架构风格遵循 CRUD 原则,该原则告诉我们对于资源(包括网络资源)只需要四种行为:创建、获取、更新和删除就可以完成相关的操作和处理。您可以通过统一资源标识符(Universal ...
4. **状态管理**:对于REST服务,Spring Security支持无状态(stateless)的会话管理。通常使用JWT(JSON Web Tokens)进行认证和授权,因为它易于传输且不需要在服务器存储会话信息。源码中可能包含JWT token的生成...
在这个实例中,我们将探讨如何使用无状态Session Bean(BEAN)来连接ArcGIS地图服务器,从而实现对地图服务的操作。 无状态Session Bean是一种EJB类型,它不保存任何客户端会话信息,因此在处理完一个请求后,Bean...
- **无状态(Stateless)**:每次请求应包含处理请求所需的所有信息,服务器不保存任何会话状态。 - **层式系统(Layered System)**:客户端不必了解服务器内部结构,可中间有代理、网关等。 - **缓存(Cache)*...
4. **无状态(Stateless)**:每个RESTful请求应包含所有必要的信息,服务器不应保存任何会话状态。这意味着每次请求都是独立的,降低了服务器存储负担。 5. **缓存(Caching)**:REST API允许客户端缓存响应,...