无状态
HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。
可以理解为,浏览器发送请求给服务器时,服务器响应请求;但同一个浏览器再次请求时,服务器不知道这次请求的浏览器是否为上次那个浏览器,也就是服务器没有记忆浏览器的特征。
无状态的状态是啥
举个例子,老王在隔壁开了一家饭店,小明听说后就想尝尝这家饭店的手艺。吃完觉得还不错,决定明天再去。
第二天,小明又去了饭店,结账的时候跟老板说:我昨天来消费过,今天可否给个优惠?
无状态(stateless)
老板答:你昨天来过吗?我没有印象了,抱歉不能给你优惠。
有状态(Stateful)
为了更好地吸引老顾客,维护好客源,老板决定把每个顾客记录下来。
老板答:奥,稍等让我查一下记录……原来是你啊,行,给你88折,欢迎下次惠顾!
总结
由上可知,这个状态就是客户端的状态。
Cookie和Session
如何保存客户端的状态?实现的方式有两种,分别是Cookie和Session。
Cookie
Cookie是通过客户端保持状态的解决方案。
从定义上来说,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。
Session
Session是通过服务器来保持状态的。
Session指的是服务器端为客户端所开辟的存储空间,在其中保存的信息就是用于保持状态。
客户端第一次访问时,服务器会为这个客户端创建唯一特征码,也就是SessionID,客户端再次请求的时候,服务器会根据SessionID在服务端的数据库中查询,若有这个SessionID,则会做出相应响应。