首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无状态协议和有状态协议

无状态协议和有状态协议
EN

Stack Overflow用户
提问于 2011-04-30 04:09:20
回答 7查看 62.7K关注 0票数 39

如何理解无状态协议和有状态协议?HTTP是无状态协议,而FTP是有状态协议。对于需要大量交互的web应用程序,底层协议应该是有状态的。我的理解正确吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-04-30 04:19:30

由于您询问的是Web应用程序,因此协议将始终是无状态的-- Web的协议是http (或https),这就是她所写的。

我认为您正在考虑的是在Web应用程序本身中提供一种状态机制。典型的方法是在Web应用程序中为用户的会话创建一个惟一的标识符(通常使用某种形式的sessionID ),该标识符在浏览器和服务器之间来回传递。这通常是在cookie中完成的,但也可以在URL上完成,根据您的平台/框架,这会给您带来更多麻烦。

您的服务器端代码存储有状态信息(同样,通常称为用户会话),但是它希望使用sessionID来查找这些信息。http流量简单地交还sessionID。只要该标识符存在,每个http事务就完全独立于所有其它事务,因此协议业务本身是无状态的。

票数 19
EN

Stack Overflow用户

发布于 2012-10-09 02:46:11

HTTP是一种无状态协议,换句话说,服务器将忘记与客户端/浏览器状态相关的所有内容。尽管web应用程序让它看起来像是有状态的。

可以强制无状态协议的行为就好像它是有状态的。如果服务器每次都将状态发送到客户端,并且客户端再次将其发送回服务器,则可以实现这一点。

在HTTP中,有三种方法可以实现这一点:

a)一种是cookies,在这种情况下,状态在HTTP标头中发送和返回。

b)第二个是URL扩展,在这种情况下,状态作为URL的一部分作为响应发送。

c)第三个是“隐藏表单字段”,其中状态作为响应的一部分发送到客户端,并作为表单隐藏数据的一部分返回到服务器

可伸缩性和高可用性

HTTP可伸缩性如此之好的一个主要原因是它的无状态性。无状态协议缓解了复制问题,因为状态本身不需要存储在服务器上。

在Internet中可靠地实现有状态协议在逻辑上是繁重的。无状态服务器也很容易扩展,而对于有状态服务器,可伸缩性是有问题的。无状态请求可以在任何时间发送到任何节点,而使用有状态则不是这样。

HTTP作为无状态协议增加了无状态web应用程序的可用性,否则将很难或不可能实现。如果连接丢失,则不存在丢失状态,只需重新发送请求即可解决问题。无状态请求也是可缓存的。

see more here

票数 53
EN

Stack Overflow用户

发布于 2017-02-02 14:33:29

HTTP是一个stateless protocol。所有基于web的应用程序也都是stateless的。

当请求被发送到服务器时,在客户端和服务器之间建立连接。服务器接收请求,处理请求并发回响应,然后,连接将关闭。

如果要发送另一个请求,在此之后,它将被视为新的请求并建立新的连接。

为了使超文本传输协议stateful,我们使用了会话管理技术。因此,它在处理当前请求时使用来自前一个请求的数据,即,它使用相同的连接进行一系列客户端-服务器交互。

会话管理技术包括:

隐藏表单field

  • cookie

  • session

  • URL-rewriting

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5836881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档