Netexpert FAQ 网络分析专家学习建议入口 @netexpert成员申请指南
netexpert积分规则的说明 Netis招贤纳士(2008年11月22日更新)
发新话题
打印

HTTP协议的"无状态"(stateless)体现在哪里呢?

HTTP协议的"无状态"(stateless)体现在哪里呢?

突然想到了这个问题。
本帖最近评分记录
  • Vader 威望 +15 good question 2008-5-24 16:44

TOP

想一想coookie干什么使得,不就知道,stateless体现在什么地方嘛~

TOP

引用:
想一想coookie干什么使得,不就知道,stateless体现在什么地方嘛~
这个问题就是在我看cookie的时候想到的。
1、从一般性上来说,stateless这个词意味着什么?state又意味着什么?
2、从http协议来说,stateless意味着什么?提出这种设计背后的理念是什么?
3、对比state-holding协议,比如FTP,我们能得出什么?

TOP

状态化协议的特征之一就是context,上下文,例如FTP,服务器必须保持你当前所在目录等信息,才能够理解下一个DELE或RETR等命令到底要找哪个文件;而Telnet则要交换Terminal Type的信息。而大多数协议还把用户名验证作为协议的必需的内容。

而HTTP最早的设计里,任何context都是通过URL和参数的方式实现,你只要复制一个URL(加参数),别人或者下一次就能打开同样的页面,进行同样的操作。
Stateless协议本身会比较简单,更多面向的是传输/编码而不是应用。只不过由于时间推移,HTTP承载了各类现代应用,才不得不出现了基于状态的辅助技术,例如cookie,或者是session技术。
无状态协议设计的理念体现在很多环节,例如client的每一个请求和Server的每一个回复甚至都会标明自己支持的HTTP协议版本号,完全假设之前Client和Server之间的通讯是没有的,即,客户端没有任何关于服务器端的知识,反之亦然。缺点是每个通讯最好都要包含很多辅助的环境信息,好处直接带来的是客户端服务器软件设计会比较简单,对软硬件依赖度比较低。

我的感受是HTTP协议设计非常简洁且具备高度扩展性,其很少规范传输的内容而更注重底层传输结构。(FTP甚至还要区分ASCII和Binary的不同) (Telnet要区分Terminal Type和回显等诸多控制选项)所以HTTP(+HTML)自从被IETF和W3C发布出来以后就被公认是一个很好的用来承载公开信息的好办法。记得当初最早的电信网站都叫做公众信息网吗? 而且到现在政府信息公开其实也是舍web求谁?当然,现代意义上的web application已经很复杂,具备了完整意义上的状态化的技术手段,但这就已经超过了HTTP的概念了。

TOP

感谢Vader精彩的回复,我自己也总结了一下:

Stateless refers to an architecture where each HTTP request is fundamentally detached from requests that came before, and unrelated to requests that will follow.That is to say,each request-respond pair is dicrete,no stateful information stored for it to evoke/retrieve early memories/context.
引用:
例如client的每一个请求和Server的每一个回复甚至都会标明自己支持的HTTP协议版本号,完全假设之前Client和Server之间的通讯是没有的
用一个词来总结,就是independent

对于和HTTP同处于一个层的FTP来说,则是通过control/command connection(tcp port 32)来实现stateful session,而http则是一个stateless session

[ 本帖最后由 ilrainyday 于 2008-5-24 19:48 编辑 ]

TOP

发新话题
版块跳转