React Native中fetch/XMLHttpRequest POST请求无法获取多个Set-Cookie问题
嘿,我之前也碰到过一模一样的问题!你现在用getResponseHeader('Set-Cookie')只能拿到最后一个Cookie值,这是因为这个方法默认只会返回同名响应头的最后一项。要获取所有Set-Cookie,得换个方式处理,另外还有个小细节需要调整,我一步步给你说:
第一步:移除手动设置的Content-Type头
你代码里手动写了http.setRequestHeader("Content-type", "multipart/form-data");,这其实完全没必要——当你使用FormData时,XMLHttpRequest会自动生成包含正确boundary的Content-Type头,手动设置反而可能导致服务器无法正确解析表单数据,建议直接删掉这行。
第二步:获取并解析所有Set-Cookie
要拿到所有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
相关产品推荐
相关产品推荐

