HTTP协议如何做才能有状态

参考答案

1. 为什么HTTP协议是无状态的

前往查看:HTTP协议为什么是无状态的

2. 如何让HTTP协议有状态

HTTP协议是无状态的,不会记录用户信息,那么,服务器怎么判断发来HTTP请求的是哪个用户呢?

于是,两种用于保持HTTP状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。
HTTP协议如何做才能有状态

3. Cookie

3.1  什么是Cookie

  • Cookie 是客户端的存储空间,由浏览器来维持。具体来说 cookie 机制采用的是在客户端保持状态的方案。
  • Cookie有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。
  • Cookie 可以翻译为“小甜品,小饼干” ,Cookie 在网络系统中几乎无处不在,当我们浏览以前访问过的网站时,网页中可能会出现 :你好 XXX,这会让我们感觉很亲切,就好像吃了一个小甜品一样。

3.2   Cookie 的实现过程

  • Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie,当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。
  • 即 Cookie 是服务器生成的,但是发送给客户端,并且由客户端来保存。每次请求加上 Cookie就行了。
  • 服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

4.  Session

4.1  什么是Session

  • 中文翻译为会话,指有始有终的一系列动作/消息。例如,打电话是从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个Session。
  • 但是,当Session一词与网络协议相关联时,它又往往隐含了“面向连接”或“保持状态”这样两个含义。
  • Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。

4.2  Session的实现过程

  • 客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是Session。客户端浏览器再次访问时,只需要从该Session中查找该客户的状态就可以了。
  • 虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie 作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID 的 Cookie,它的值为该Session的id(即放在HTTP响应报文头部信息里的Set-Cookie)。Session依据该 Cookie来识别是否为同一用户。

5.  Cookie 和 Session 的区别

  • Cookie 数据存放在客户的浏览器上,Session 数据放在服务器上;
  • Cookie 不是很安全,别人可以分析存放在本地的Cookie并进行Cookie欺骗,考虑到安全应当使用Session;
  • Session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用Cookie;
  • 单个Cookie 在客户端的限制是3K,就是说一个站点在客户端存放的Cookie不能超过3K。

6. Cookie 和 Session 应用场景

  • 登录网站,今输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是Cookie。
  • Session一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了Session。

7.  总结

  • 如果说 Cookie 机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session 相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
  • Cookie 和 Session 的方案虽然分别属于客户端和服务端,但是服务端的 Session 的实现对客户端的 Cookie 有依赖关系的,上面我讲到服务端执行 Session 机制时候会生成 Session 的 id 值,这个 id 值会发送给客户端,客户端每次请求都会把这个 id 值放到 http 请求的头部发送给服务端,而这个 id 值在客户端会保存下来,保存的容器就是 Cookie,因此当我们完全禁掉浏览器的Cookie的时候,服务端的Session也会不能正常使用。
  • 如果客户端浏览器禁用或不支持Cookie 功能,一般这种情况下,会使用一种叫做 URL 重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

以上,是Java面试题【HTTP协议如何做才能有状态】的参考答案。

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

👇阅读作者更多技术干货👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧