HTTP基本性质
- 简单的
- 可扩展的
- 无状态的,有会话的
HTTP本身是一种同步协议,即客户端发送请求后会一直等待服务器响应,直到收到响应或发生超时才会继续执行后续操作。
在传统的HTTP请求中,客户端发送请求后会阻塞等待服务器响应,期间无法进行其他操作。这种同步方式适用于请求和响应需要按顺序处理的场景,例如获取页面内容、提交表单等。
然而,随着Web应用的发展和用户体验的要求提高,异步操作变得越来越重要。为了实现异步操作,出现了一些扩展HTTP协议的技术,如AJAX(Asynchronous JavaScript and XML)、WebSockets和Server-Sent Events等。这些技术可以在不刷新整个页面的情况下,通过异步方式与服务器进行通信,实现更加流畅和动态的用户体验。
HTTP本身是同步的协议,但通过一些技术和手段可以实现异步操作,提升用户体验。
Cookie
- 服务器发送到浏览器,并在浏览器端中保存的一小块数据
- 浏览器下次访问服务器时,会自动携带,将其发送给服务器
- 依赖于浏览器,不安全
Session
- JavaEE标准,在服务端记录客户端信息
- 数据存放在服务端更安全,但是会增加服务端的压力
- 依赖于Cookie
http://localhost:8080/community/alpha/session/set
http://localhost:8080/community/alpha/session/get
分布式部署会话管理
在分布式架构中可能会出现Session共享的问题:
浏览器发出请求访问Nginx,Nginx分发请求,在服务器1中创建一个Session对象,返回响应报文携带SessionId给浏览器,当下次请求携带SessionId时,Nginx分发给服务器2,但是服务器2没有对应的Session数据。
解决方案:
1、粘性Session
- 设置负载均衡策略:根据客户端固定的ip分给同一个服务器处理
- 缺点:很难保证服务器是负载均衡的,性能不好
2、同步Session
- 当某一个服务器创建Session并保存数据后,都会同步给其他服务器,所有服务器就都包含Session信息
- 缺点:
- 一台服务器需要同步给多台,对服务器性能产生影响
- 服务器之间会产生耦合,对部署有影响
3、共享Session
- 单独一台服务器存Session,所有服务器向这台服务器获取Session
- 缺点:单体的会挂,集群处理Session又是冗余的
4、使用Cookie,敏感数据存到数据库(集群,主从备份)中
- 缺点:数据存到硬盘里性能慢
- 优化:会话数据存到Nosql中(Redis)