Java面试题——第七篇(Java Web)
1.forward和redirect区别
forward和redirect代表了两种请求转发方式:直接转发和间接转发
- 直接转发方式(forward):客户端和浏览器只发出一次请求,服务器在处理这个请求的过程中,将请求转发给另一个资源或组件进行处理。
- 简介转发方式(redirect):实际上是两次HTTP请求,服务端在响应第一次请求的时候,让浏览器再向另一个URL发出请求,从而达到转发的目的。
2. NIO特点
事件驱动模型,单线程处理多任务,非阻塞IO、零拷贝、多路复用大大提高了Java网络应用的可伸缩性和实用性,基于Reactor线程模型。
3. 什么是Cookie和Session
什么是Cookie
HTTP Cookie是服务器发送到用户浏览器并保存在本地的一小块数据。它会在浏览器下一次向同一个服务器再次发起请求时携带并发送到服务器上。通常,用于告知服务端两个请求是否来自同一个浏览器,如保持用户登录状态。什么是Session
Session代表着服务器和客户端一次会话的过程。Session对象存储特定用户会话所需的属性及配置信息。
4. Cookie和Session如何配合
用户第一次请求服务器的时候,
服务器根据用户提交的相关信息,创建session,请求返回时将此Session的唯一标识信息sessionId返回给浏览器,浏览器接收到服务器返回的sessionId后,将此信息存入cookie,同时cookie记录此sessionId属于哪个域名。
当用户第二次访问服务器的时候,请求自动判断此域名下是否存在cookie信息,如果存在自动将cookie信息发送给服务端,服务端从cookie中取出sessionId,再根据sessionId查找对应的session信息,如果没有找到说明用户没有登录或者登录失效。
根据以上流程,SessionId是连接Cookie和Session的桥梁。大部分系统也是基于此验证用户登录状态。
5. 如果客户端禁止Cookie,Session还能用吗
可以用,session只是依赖cookie存储sessionId,如果cookie禁用了,还可以使用url中添加sessionId的方式保证session能正常使用。
6. 如何考虑分布式session问题
- 客户端存储:直接将信息存储在cookie中,cookie是存储在客户端上的一小段数据,客户端通过http协议和服务器端进行cookie交互,通常用来存储一些不敏感信息。
- Nginx ip_hash策略:服务端使用Nginx代理,每个请求按照IP的hash分配,这样来自同一IP固定访问一个后台服务器。
- 共享session :服务端无状态话,将用户session信息使用缓存中间件(如Redis)统一管理。
7. 什么是跨站脚本(XSS)攻击,如何避免
XSS攻击是攻击者向有XSS漏洞的网站中输入恶意的HTML代码,当用户浏览网站时,这段HTML代码会自动执行,从而达到攻击目的。XSS攻击类似于SQL注入攻击,SQL注入攻击中以SQL语句作为用户输入,从而达到查询、修改、删除数据的目的,而在XSS攻击中,通过插入恶意脚本,实现对用户浏览器的控制,获取用户信息。XSS是Web程序中常见的漏洞。
防范思路:
对输入和URL参数进行过滤
对输出到页面的数据进行适当的编码或者转义,以防止恶意脚本的执行。
8. 什么是跨站请求伪造(CSRF)攻击,如何避免
CSRF称为跨站请求伪造。一般来说,
攻击者通过伪造用户的浏览器请求,向一个用户曾经访问过的网站发送出去,使得目标网站接收并误以为是用户真实操作而去执行命令。
如何避免
- 验证HTTP Referer:字段记录了HTTP请求的来源地址。
- 使用验证码:关键操作页面加上验证码