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

为什么IE10向同一站点发起两次请求时携带不同Cookie导致401错误

问题根因

该问题是IE10浏览器的原生Cookie处理缺陷导致,核心触发点有两个:

  • IE10对同域名下不同路径下发的同名SESSION Cookie,不会按照路径最长匹配规则读取,会随机选择携带,导致两次请求携带的Cookie不一致
  • IE10默认要求站点返回符合规范的P3P响应头才会持久化保存Cookie,未携带P3P头的响应返回的Cookie会被临时丢弃,后续请求会携带新生成的未授权Cookie
解决方案

1. SpringBoot侧统一SESSION Cookie配置

强制全局指定SESSION Cookie的根路径、属性,避免生成多份同名Cookie:

application.yml 配置方式

server:
  servlet:
    session:
      cookie:
        path: /
        http-only: true
        # HTTP站点设为false,HTTPS站点设为true
        secure: false
        max-age: 1800

代码自定义配置方式

@Bean
public CookieSerializer cookieSerializer() {
    DefaultCookieSerializer serializer = new DefaultCookieSerializer();
    serializer.setCookiePath("/");
    serializer.setUseHttpOnlyCookie(true);
    // HTTPS生产环境请放开下面配置
    // serializer.setUseSecureCookie(true);
    return serializer;
}

2. 添加P3P响应头适配IE10

新增全局过滤器给所有响应添加兼容IE10的P3P头:

@Component
public class IEP3PFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        httpResponse.setHeader("P3P", "CP=\"CAO PSA OUR\"");
        chain.doFilter(request, response);
    }
}

3. 前端AJAX请求适配(可选)

如果存在AJAX异步请求,给IE10下的请求开启withCredentials属性:

// 仅IE10生效
if (navigator.userAgent.indexOf("MSIE 10.0") !== -1 && window.XMLHttpRequest) {
    var xhr = new XMLHttpRequest();
    xhr.withCredentials = true;
}
验证步骤

修改完成后清除IE10的所有缓存、Cookie数据,重启浏览器重复测试请求,确认两次请求携带的SESSION Cookie值完全一致即可。

内容的提问来源于stack exchange,提问作者baofeidyz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:36:03