http - 无状态协议(protocol)和有状态协议(protocol)

标签 http networking network-protocols

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

最佳答案

HTTP 是一种无状态协议(protocol),换句话说,服务器会忘记与客户端/浏览器状态相关的所有内容。尽管 Web 应用程序使它实际上看起来像有状态的。

可以强制无状态协议(protocol)表现得像有状态一样。如果服务器将状态发送给客户端,并且如果客户端每次都将状态再次发送回服务器,则可以实现这一点。

在 HTTP 中可以通过三种方式完成此操作:

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

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

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

可扩展性和高可用性

HTTP 扩展性如此出色的主要原因之一是它的无状态性。无状态协议(protocol)减轻了复制问题,因为状态本身不需要存储在服务器上。

有状态协议(protocol)在逻辑上很难可靠地在 Internet 中实现。无状态服务器也很容易扩展,而有状态服务器的可扩展性是有问题的。无状态请求可以随时发送到任何节点,而有状态则不是这种情况。

HTTP 作为无状态协议(protocol)提高了无状态 Web 应用程序的可用性,否则将难以或不可能实现。如果连接丢失,没有丢失的状态,简单的请求重发将解决问题。无状态请求也是可缓存的。

see more here

关于http - 无状态协议(protocol)和有状态协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5836881/

相关文章:

node.js - 重定向到 node.js 中的不同位置和端口

python - Riak - 尝试使用 Python 客户端库连接到 Riak 集群时连接被拒绝

networking - Powershell 检测到额外的映射驱动器

c++ - Boost Asio 始终返回 0.0.0.0 IP

asp.net - 我是一个有抱负的开发人员,想要构建像 PayPal 这样的大型系统。我应该走哪条路?

http - 更改 Netty 4 HTTP 文件服务器示例以使用 ChunkedStream 而不是 ChunkedFile

Apache http 基本身份验证?

ios - AFNetworking 错误域代码=-999?但是工作正常吗?

network-protocols - 互联网上传输的数据使用什么语言?

ip - 为什么::1 与 127.0.0.1 不匹配?