当浏览器按照window.location.href =“index.html”进行定期请求时,会清除当前窗口并将服务器响应加载到窗口中。
使用ajax请求,当前窗口/文档不受影响,JavaScript代码可以检查请求的结果,并使用这些结果执行所需的操作(将HTML动态插入页面,解析JSON并将其用于页面逻辑,解析XML等等)。
服务器不会做任何不同的事情 – 这只是客户端对待两个请求的响应。
例子:session失效时
1.点击跳转链接等http请求,会跳转到登录界面
2.当点击按钮触发ajax请求时,页面不跳转。需后端返回在响应头设置的session状态(timeout),前端手动跳转。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
if (!SecurityUtils.getSubject().isAuthenticated()) {
//判断session里是否有用户信息
if (req.getHeader("x-requested-with") != null
&& req.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
//如果是ajax请求响应头会有,x-requested-with
res.setHeader("session-status", "timeout");//在响应头设置session状态
return;
}
}
chain.doFilter(request, response);
}