"无状态"的HTTP
理解HTTP协议的无状态,需了解HTTP的“无连接”性,说的是一个请求产生一个连接,请求处理完毕,连接即断开。所以客户端和服务端的信息沟通都是一次性的。
对应的“有连接”性,可用TCP,或者指定了Keep-Alive的HTTP连接来表示。
由于HTTP的无连接性,服务端对客户端的状态信息不做保留,也就是单次请求的内容与上次请求不存在连贯性,客户端需在每次请求时将所有信息进行传递才可完成,并且请求产生的结果互相不存在关联性。
当然,有了session和cookie,一切都变得不一样了
这一块网上的解释都比较含糊,有一个深究的帖子可以参考: http 协议无状态中的 "状态" 到底指的是什么?!
能“状态转换”的REST
REST里面的ST(state translate),指的是RE所代表的表现层,也就是针对提供出来的各类关于资源状态的URI来讲的,对于状态转换,我是这么理解的:
对于所暴露出的服务资源,按照REST的风格要求,应提供对一组CRUD操作方法的服务支持,而CRUD动作,是会对相应资源有明显的状态影响的(除了R),因此这里的状态,是针对资源而讲的,指的是请求的结果。
如,对于一个学生信息资源入口 /student/{studentId}/ ,提交的CRUD请求会导致特定学生信息资源的状态变更为已创建、已获取(如果有)、已更新、已删除
所以,这两个“状态”,指的应该不是同一回事。