You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jersey后端返回303状态码,前端XMLHttpRequest收到200的问题

解决方案

核心原因

浏览器的XMLHttpRequest会自动跟随所有3xx系列重定向,你看到的200状态码是重定向目标页面的响应,而非服务器返回的原始303响应。因此前端无法获取原始响应的Location头和Cookie——XHR已经自动完成跳转,当前处理的是跳转后的页面响应。

具体修复步骤

1. 禁用XHR自动重定向

在调用xhr.open()之后添加以下代码,阻止浏览器自动跳转,这样就能拿到原始的303响应:

xhr.followRedirects = false;

注:现代主流浏览器均支持该属性,若遇到兼容性问题,可额外添加请求头标识AJAX请求:

xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

2. 调整后端逻辑(推荐方案)

AJAX请求本身不需要浏览器自动跳转,更合理的做法是后端返回200状态码,将跳转地址和Token通过响应头或响应体传递给前端,由前端手动执行跳转:

  • 修改后端代码:
return Response
        .status(Response.Status.OK)
        .entity(token)
        .header("Redirect-Url", redirect)
        .cookie(cookie)
        .build();
  • 对应修改前端代码:
if(xhr.status === 200) {
    console.log("Login success");
    const redirectUrl = xhr.getResponseHeader("Redirect-Url");
    if(redirectUrl) {
        window.location.href = redirectUrl;
    }
}

3. 检查Cookie路径配置

你设置的Cookie路径为/app/,如果前端页面不在/app/路径下,浏览器会限制前端获取该Cookie。可以将路径调整为根路径/,确保所有页面都能访问:

NewCookie cookie = new NewCookie("Token",token,"/", request.getServerName(),"User token",1800,false);

4. 排查代理/服务器配置干扰

检查Tomcat的server.xml或反向代理(如Nginx)的配置,确认是否存在自动修改3xx响应的规则,部分服务器会默认调整重定向行为导致异常。


内容的提问来源于stack exchange,提问作者Dewa Syahrizal MN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:57:51