大家都知道HTTP/1.1之后是默认长连接的,但是面向请求与响应的HTTP协议何来连接一说?既然没有连接HTTP是如何保存业务的状态呢?
首先我们先要知道HTTP连接指的是什么
长连接与短连接
在设置首部字段 Connection:Keep-Alive 就是长连接了?
从现象来看确实如此
但此连接非HTTP连接,HTTP依旧是具有无状态特性的应用层协议
- 长连接指的是在同一客户端上的同一浏览器访问同一服务器时,HTTP通信时会复用底层的TCP连接
在HTTP/1.1之后默认长连接,之所以强调同一浏览器是因为TCP连接是端到端的。不同浏览器的端口不会相同 - 短连接指的是客户端与服务器的每一次HTTP请求与响应都会建立新的TCP连接
言此,收信人(响应方)依旧不会知道这个经常写信给自己的是谁(请求方)反之也一样。也许你可能会说信上不是写了名字和地址吗?但这种伪造成本几乎为零,有着严重的安全漏洞
有了上面的铺垫,那收信人是如何判断写信人的身份?
服务端保存业务状态的方式
- Cookie 服务端回信时写入Cookie让客户端保存起来,让客户端下次写信的时候把cookie带上
- Session 在服务器上创建Session保存业务状态
Session保存在服务器中,服务器是如何判断Session与客户端的对应关系?- 在Cookie中写入SessionID
- 在URL路径中带上SessionID