为什么我们不能运行网络的有状态协议?

时间:2011-03-01 11:20:08

标签: http session

我理解HTTP中的会话是无状态的,因此我们有像cookie,URL重写等方法来维护状态。

我的问题是,由于状态非常重要,为什么设计师在设计HTTP协议时将其排除在外?它有什么具体原因吗?

重新设计协议以使其成为有状态是否值得努力?

4 个答案:

答案 0 :(得分:2)

HTTP是Gopher protocol的下一步。它出现在20世纪90年代,Geocities就在那里,CGI形式是互动环节的高度。

实际上,状态维持在高于HTTP的水平,并且似乎功能正常(cookie,会话ID等)。你为什么要改写协议?

答案 1 :(得分:1)

无国籍人更便宜。好好阅读:

http://www.tonymarston.net/php-mysql/stateless-protocol.html

答案 2 :(得分:0)

我认为当时发明HTTP的任何人都没有预见到HTTP将以现在的方式使用。

答案 3 :(得分:0)

主要原因是Web应用程序的可伸缩性和高可用性,为什么我们不能拥有运行Web的有状态协议。无状态协议简化了复制和可伸缩性问题,因为状态本身不需要存储在服务器上。 HTTP和HTTPS作为Web应用程序的无状态协议。无状态HTTP请求可以随时发送到任何节点,而有状态则不是这种情况。无状态HTTP协议的优点是活动Web客户端的数量可以大得多,而请求通常是交错的,而不是在同一时刻全部传输。

如果连接丢失,没有丢失的状态,简单的请求重发将解决问题,虽然这是安全噩梦,因为每个请求都被视为新请求而不是之前的后续请求请求。

无国籍人对网络安全非常不利。 HTTP的另一面是Web服务器不维护任何Web客户端活动的任何内存(状态)。自创建以来,网络安全漏洞就已经存在,并且随着时间的推移变得越来越危险。 Douglas Crockford使用Seif project修复了网络安全漏洞。