如果REST应用程序应该是无状态的,那么如何管理会话?
我需要一些澄清。我一直在阅读有关REST和构建RESTful应用程序的书籍。根据维基百科,REST本身被定义为代表性状态转移。因此,我不理解所有这些无状态的狼吞虎咽的书,每个人都在不停地吐 来自维基百科: 在任何特定时间,客户机都可以在 应用程序状态或“静止”。处于rest状态的客户端能够 与用户交互,但不创建任何负载,也不消耗每个客户端的任何资源 服务器集或网络上的存储 他们只是说不要使用会话/应用程序级数据存储吗 我知道REST的一个目标是使URI访问一致且可用,例如,而不是将分页请求隐藏在POST中,使请求的页码成为get URI的一部分。对我来说有道理。但它似乎只是说不应该在服务器端存储每客户机数据(会话数据)太过火了 如果我有一个消息队列,并且我的用户希望读取消息,但在读取消息时,希望在会话期间阻止某些发件人发送消息,该怎么办?将其存储在服务器端的某个位置,让服务器只发送未被用户阻止的消息(或消息ID),这难道没有意义吗 每次请求新邮件列表时,我真的必须发送整个邮件发送者列表以阻止吗?与我相关的消息列表一开始甚至不应该是公开的资源 再一次,我只是想理解这一点。请有人澄清一下如果REST应用程序应该是无状态的,那么如何管理会话?,rest,session-state,Rest,Session State,我需要一些澄清。我一直在阅读有关REST和构建RESTful应用程序的书籍。根据维基百科,REST本身被定义为代表性状态转移。因此,我不理解所有这些无状态的狼吞虎咽的书,每个人都在不停地吐 来自维基百科: 在任何特定时间,客户机都可以在 应用程序状态或“静止”。处于rest状态的客户端能够 与用户交互,但不创建任何负载,也不消耗每个客户端的任何资源 服务器集或网络上的存储 他们只是说不要使用会话/应用程序级数据存储吗 我知道REST的一个目标是使URI访问一致且可用,例如,而不是将分页请求隐藏在
更新: 我发现了一个堆栈溢出问题,它的答案并不能让我完全理解: 也就是说,重要的客户端状态应该在每次请求时都被转移。。。。Ugg。。好像有很多开销。。。这是对的吗?基本的解释是: 服务器上没有客户端会话状态 无状态意味着服务器不在服务器端存储有关客户端会话的任何状态 客户端会话存储在客户端上。服务器是无状态的,这意味着每个服务器可以随时为任何客户机提供服务,没有会话关联或粘性会话。相关会话信息存储在客户机上,并根据需要传递给服务器 这并不排除web服务器与之对话的其他服务维护有关业务对象(如购物车)的状态,只是不涉及客户端的当前应用程序/会话状态 客户端的应用程序状态永远不应该存储在服务器上,而是从客户端传递到需要它的每个地方 这就是REST中的ST的来源,状态转移。您可以四处传输状态,而不是让服务器存储它这是扩展到数百万并发用户的唯一方法。如果没有其他原因,那就是因为数百万个会话就是数百万个会话 会话管理的负载在所有客户机上分摊,客户机存储其会话状态,服务器可以以无状态方式为多个数量级或更多的客户机提供服务 即使对于一个您认为只需要10万并发用户的服务,您仍然应该使您的服务成为无状态的。数以万计的人仍然是数以万计的,这将带来时间和空间成本 无状态是HTTP协议和web通常被设计为如何运行的,是一个总体上更简单的实现,您有一个单一的代码路径,而不是一堆服务器端逻辑来维护一堆会话状态 有一些非常基本的实施原则: 这些是原则而不是实现,您如何满足这些原则可能会有所不同 总括而言,有关建议如下: