网络面试-ox09 http是如何维持用户的状态?
Posted 谷_寒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络面试-ox09 http是如何维持用户的状态?相关的知识,希望对你有一定的参考价值。
http是无状态、无连接的特性
无连接 —— 使用了keep-alive 来处理 无状态 —— 使用了Cookie/Session 来维持
解决无状态的方案 2 种
-
基于Session实现的会话保持
<1> 在客户端第一次向服务器发送 HTTP 请求后,服务器会创建一个 Session 对象并将客户端的身份信息以键值对的形式存储下来;
<2> 然后分配一个会话标识(SessionId)给客户端,这个会话标识一般保存在客户端 Cookie 中,
<3> 之后每次该浏览器发送 HTTP 请求都会带上 Cookie 中的 SessionId 到服务器,服务器根据会话标识就可以将之前的状态信息与会话联系起来,从而实现会话保持。
优点:安全性高,因为状态信息保存在服务器端。
缺点::由于大型网站往往采用的是分布式服务器,浏览器发送的 HTTP 请求一般要先通过负载均衡器才能到达具体的后台服务器,倘若同一个浏览器两次 HTTP 请求分别落在不同的服务器上时,基于 Session 的方法就不能实现会话保持了。 【解决方法:采用中间件,例如 Redis,我们通过将 Session 的信息存储在 Redis 中,使得每个服务器都可以访问到之前的状态信息】
-
基于Cookie实现的会话保持
<1> 当服务器发送响应消息时,在 HTTP 响应头中设置 Set-Cookie 字段,用来存储客户端的状态信息。
<2> 客户端解析出 HTTP 响应头中的字段信息,并根据其生命周期创建不同的 Cookie,这样一来每次浏览器发送 HTTP 请求的时候都会带上 Cookie 字段,从而实现状态保持。
<3> 基于 Cookie 的会话保持与基于 Session 实现的会话保持最主要的区别是前者完全将会话状态信息存储在浏览器 Cookie 中。
优点:服务器不用保存状态信息, 减轻服务器存储压力,同时便于服务端做水平拓展。
缺点:该方式不够安全,因为状态信息存储在客户端,这意味着不能在会话中保存机密数据。除此之外,浏览器每次发起 HTTP 请求时都需要发送额外的 Cookie 到服务器端,会占用更多带宽。
-
Cookie 被禁用了怎么办?
通过重写URL的方式将会话标识放在URL的参数里,也可以实现会话保持。
总结:
1)基于Session保存状态,返回给客户端sessionId,每次请求带上就行
2)基于Cookie保持状态,这样每次都是带上cookie状态参数
3)Cookie 被禁用,通过重写URL方式将标识放在URL的参数里面。
公众号:`技术小难`
[简书](https://www.jianshu.com/u/1851ec413025)
[博客园](https://account.cnblogs.com/blog-apply) 链接需要替换
[CSDN](https://blog.csdn.net/u012496940?spm=1000.2115.3001.5343)
[知乎](https://www.zhihu.com/people/gu-han-90-61)
[掘金](https://juejin.cn/user/1943592286824333)
[segmentfault](https://segmentfault.com/u/natqeeak/articles)
本文由 mdnice 多平台发布
前端技能树,面试复习第 32 天—— 计算机网络:HTTP 状态码详解
⭐️ 本文首发自 前端修罗场(点击加入社区,参与学习打卡,获取奖励),是一个由资深开发者独立运行的专业技术社区,我专注 Web 技术、答疑解惑、面试辅导以及职业发展。。
首先,我们先对 HTTP 状态码的类别进行一个总结:
类别 | 原因 | 描述 |
---|---|---|
1xx | Informational(信息性状态码) | 接受的请求正在处理 |
2xx | Success(成功状态码) | 请求正常处理完毕 |
3xx | Redirection(重定向状态码) | 需要进行附加操作一完成请求 |
4xx | Client Error (客户端错误状态码) | 服务器无法处理请求 |
5xx | Server Error(服务器错误状态码) | 服务器处理请求出错 |
可以发现,HTTP 状态大致分为 5 类。下面我们进行详细的描述。
1. 2X
以上是关于网络面试-ox09 http是如何维持用户的状态?的主要内容,如果未能解决你的问题,请参考以下文章