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

React Native中fetch/XMLHttpRequest POST请求无法获取多个Set-Cookie问题

解决XMLHttpRequest仅获取最后一个Set-Cookie的问题

嘿,我之前也碰到过一模一样的问题!你现在用getResponseHeader('Set-Cookie')只能拿到最后一个Cookie值,这是因为这个方法默认只会返回同名响应头的最后一项。要获取所有Set-Cookie,得换个方式处理,另外还有个小细节需要调整,我一步步给你说:

第一步:移除手动设置的Content-Type头

你代码里手动写了http.setRequestHeader("Content-type", "multipart/form-data");,这其实完全没必要——当你使用FormData时,XMLHttpRequest会自动生成包含正确boundary的Content-Type头,手动设置反而可能导致服务器无法正确解析表单数据,建议直接删掉这行。

要拿到所有Set-Cookie值,得用getAllResponseHeaders()方法获取完整的响应头字符串,然后自己解析出所有Set-Cookie条目。修改你的onreadystatechange回调函数如下:

http.onreadystatechange = function() {
  if (http.readyState === 4 && http.status === 200) {
    // 获取全部响应头
    const allResponseHeaders = http.getAllResponseHeaders();
    // 按换行符分割成单独的头行
    const headerLines = allResponseHeaders.split('\r\n');
    // 筛选出所有以Set-Cookie开头的行
    const allSetCookies = headerLines.filter(line => line.startsWith('Set-Cookie:'));
    
    // 现在可以逐个处理每个Cookie了
    allSetCookies.forEach(cookieLine => {
      // 去掉"Set-Cookie: "前缀,拿到实际的Cookie内容
      const cookieValue = cookieLine.substring('Set-Cookie: '.length).trim();
      console.log('获取到的Cookie:', cookieValue);
      // 这里可以根据需要把Cookie存储起来或者做其他处理
    });
  }
};

补充说明

  • 你已经设置了http.withCredentials = true,这个是对的——如果是跨域请求,这个选项必须开启才能让浏览器处理服务器返回的Cookie;同域请求下开启也不会有问题。
  • 解析响应头时,不同浏览器的换行符可能略有差异,但\r\n是标准格式,大部分场景下都能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:46:20