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

Chrome 64中Ajax请求触发401认证错误(IIS基础认证场景)

问题原因及解决方案

嘿,这个问题确实和Chrome 64的变更有关!我来给你捋清楚前因后果和解决办法:

为什么Chrome 64会出现这个问题?

Chrome 64版本对Basic Authentication在XMLHttpRequest(也就是你说的Ajax请求)中的处理逻辑做了调整:当会话中的认证凭证无法正常传递时,它不再像旧版(63及以下)或者其他浏览器那样自动复用现有会话的认证信息,反而会在请求URL里拼接上null:null@这种无效的认证前缀,导致IIS无法识别合法的认证信息,直接返回401错误。而Safari、Firefox和Chrome 63及更早版本,会正确复用当前已通过认证的会话凭证,不会生成这种无效URL,所以功能正常。

可行的解决办法

  • 给Ajax请求添加withCredentials属性:这是最直接的方案,告诉浏览器在请求中携带当前会话的认证信息。
    原生XMLHttpRequest示例:
    var xhr = new XMLHttpRequest();
    xhr.open('GET', '你的请求地址', true);
    xhr.withCredentials = true; // 关键设置
    xhr.send();
    
    jQuery Ajax示例:
    $.ajax({
      url: '你的请求地址',
      type: 'GET',
      xhrFields: {
        withCredentials: true // 关键设置
      },
      success: function(data) {
        // 处理返回结果
      }
    });
    
  • 检查IIS的Basic认证配置:确保站点已经正确开启Basic认证,并且没有和匿名访问的规则冲突;同时确认应用程序池的运行账号拥有访问站点资源的权限,避免凭证传递过程中丢失。
  • 手动添加Authorization请求头:如果上面的方法无效,可以尝试在请求头里手动构造认证信息(注意安全,不要明文暴露账号密码),格式如下:
    xhr.setRequestHeader('Authorization', 'Basic ' + btoa('用户名:密码'));
    
    不过这种方式建议配合后端会话管理使用,避免前端存储敏感信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:21:33