Postman 中如何正确发送带 Cookies 的请求?

书生シ静静 阅读 76

我在用 Postman 调试一个需要登录态的接口,后端返回了 Set-Cookie,但后续请求好像没自动带上 Cookie。我手动在 Headers 里加了 Cookie 字段也不行,是不是哪里配置错了?

我的前端代码是用 React 写的,登录后 axios 请求能正常携带 Cookie,但 Postman 就不行。这是我的请求代码:

axios.post('/api/login', { username, password }, {
  withCredentials: true
}).then(res => {
  // 登录成功,后续请求自动带 Cookie
  return axios.get('/api/profile', { withCredentials: true });
});

Postman 里我已经开了 “Automatically follow redirects” 和 “Send cookies”,但还是 401,到底该怎么设置?

我来解答 赞 6 收藏
二维码
手机扫码查看
2 条解答
ლ照南
ლ照南 Lv1
这个问题很常见,核心在于 Postman 的 Cookie 处理机制和浏览器不太一样。

先说最直接的解决方案:

第一步:使用 Postman 右侧的 Cookie 管理器

在 Postman 右侧面板找到 "Cookies" 链接(就在 Headers、Authorization 那些标签旁边),点击后会弹出 Cookie Manager 窗口。然后点击 "Add Cookie",在输入框里填入你的 cookie,格式类似:

session_id=abc123; token=xyz789


域名选对你请求的域名,比如 localhost 或者你的 API 域名。

第二步:如果上一步不行,检查后端的 Set-Cookie 响应头

你登录接口返回的 Set-Cookie 响应头里可能包含了一些限制:

1. Domain 限制:如果后端设置了 Domain=example.com,但你在 Postman 里请求的是 localhost 或者 api.example.com,cookie 就不会自动发送
2. Secure 标记:如果设置了 Secure,需要 HTTPS 环境
3. SameSite:这个主要影响浏览器,Postman 不受影响

你可以在 Postman 的响应面板里查看 Headers,找到 Set-Cookie 那一行,看看具体写了什么。

第三步:手动提取并传递 Cookie

如果上面的方法都不行(很多内部接口确实会有奇怪的配置),你可以这样做:

1. 登录接口的响应里提取 cookie 值
2. 在 Tests 脚本里把 cookie 存到环境变量
3. 后续请求从环境变量读取并手动加到 Headers

登录接口的 Tests 里写:

// 提取 Set-Cookie 头中的值
var cookieHeader = postman.getResponseHeader('Set-Cookie');
if (cookieHeader) {
// 取第一个 cookie 的 name=value 部分
var cookieValue = cookieHeader.split(';')[0];
pm.environment.set('auth_cookie', cookieValue);
}


然后在后续请求的 Headers 里添加:

Cookie: {{auth_cookie}}


第四步:检查你的手动添加方式

你说手动在 Headers 加了 Cookie 字段不行,可能是格式问题。Header 名称应该是 "Cookie"(不是 "Cookie" 以外的任何东西),值就是 name=value,多个 cookie 用分号分隔。



顺带吐槽一下,很多后端开发者在写接口时只考虑了浏览器场景,完全没想过用 Postman 调试的情况,所以 Cookie 配置得比较随意。你这种情况我遇到好几次了,基本都是后端 Cookie 的 Domain 设置得太窄导致的。
点赞
2026-03-13 14:01
程序员爱丹
这个问题我之前踩过坑,Postman 和浏览器的 Cookie 机制确实不太一样。

你开了 "Send cookies" 还是不行,大概率是 Cookie 没存进去。Postman 默认会把 Cookie 存到它自己的 Cookie Jar 里,但有个坑:如果你的响应头里的 Set-Cookie 带了 HttpOnly 或者 Domain/Path 跟你当前请求的 URL 不匹配,它可能就悄悄扔掉了。

先检查一下你登录请求的 Response Headers,看看 Set-Cookie 的 Domain 和 Path 是什么。假设你的接口是 http://localhost:8080/api/login,那 Cookie 的 Domain 应该是 localhost 或者 .localhost,Path 至少得包含 /api。

然后点开 Postman 右侧的 Cookies 链接(在 Send 按钮下面那排),看看 localhost 域名下有没有你的 Cookie。没有的话就是没存进去。

还有一种常见情况,你的后端可能设置了 SameSite=Strict 或者 Secure=true。前者在 Postman 里会有问题,后者要求必须是 HTTPS。开发环境建议后端把 SameSite 设成 Lax 或 None,Secure 先关掉。

如果以上都没问题,试试这一招:在 Postman 的 Settings 里,找到 General 选项卡,确认 "Send cookies" 是开着的,然后把 "Restrict to third-party cookies" 关掉。

实在不行,手动加 Cookie 也行。点开 Cookies 管理,手动添加一个 Cookie,Name 和 Value 填你后端返回的那个。然后在后续请求里,Headers 不要手动加 Cookie 字段,Postman 会自动从 Cookie Jar 里带。

对了,你说手动在 Headers 里加 Cookie 不行,这个我怀疑是你加的格式不对。正确格式是这样的:

Cookie: sessionId=abc123; token=xyz789


多个 Cookie 用分号空格隔开。但这种方式不推荐,太麻烦,还是让 Postman 自动管理比较好。

最后提醒一点,你前端代码里 withCredentials: true 是配合 CORS 用的,Postman 不受同源策略限制,这个配置对它没意义。核心还是确保 Cookie 能正确存进 Cookie Jar。
点赞 2
2026-03-02 20:00