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

Vue+Axios对接Node.js服务:跨域下获取响应Cookie失败问题

解决Vue+Axios无法获取响应头部Access-Token/Uid的问题

我之前碰到过几乎一模一样的场景,结合你用的技术栈(Vue 2.5.2 + Axios 0.17.1,后端Express 4.16.2 + cors 2.8.4),可以从这几个方向排查解决:

1. 先确认Axios是否开启withCredentials

你的请求返回了set-cookie头部,说明后端要设置Cookie,但浏览器跨域请求时默认不会处理Cookie,这也可能间接导致自定义响应头无法被正确读取。必须给Axios开启withCredentials:

全局配置(推荐)

在Vue项目入口文件(比如main.js)里添加:

import axios from 'axios'
axios.defaults.withCredentials = true
Vue.prototype.$axios = axios

单个请求配置

如果只有登录请求需要,也可以单独设置:

this.$axios.post('/api/login', loginData, {
  withCredentials: true
}).then(response => {
  console.log(response.headers['access-token'])
  console.log(response.headers['uid'])
})

2. 检查后端CORS配置的细节

虽然你已经加了Access-Control-Expose-Headers,但要确保cors中间件的配置和credentials选项配合正确:

Express后端的cors配置里,origin不能设为*(带Credentials的请求不允许通配符域名),必须指定前端的具体地址,同时开启credentials: true:

const cors = require('cors')
app.use(cors({
  origin: 'http://localhost:8080', // 替换成你的Vue项目运行地址
  credentials: true,
  exposedHeaders: ['Access-Token', 'Uid'] // 注意这里的大小写要和后端返回的完全一致
}))

划重点:exposedHeaders里的头部名称大小写必须和后端实际返回的一致,比如后端返回Access-Token,就不能写成access-token。

3. 适配Axios老版本的头部读取方式

你用的Axios 0.17.1版本比较旧,可能存在头部大小写转换的问题。建议先打印整个响应头对象看看实际字段:

.then(response => {
  console.log('所有响应头:', response.headers)
})

如果发现自定义头部是小写形式(比如access-token),就需要用小写的键去获取,部分浏览器会自动把响应头转为小写。

4. 排除浏览器缓存或拦截器的干扰

有时候浏览器会缓存OPTIONS请求的结果,导致新的CORS配置不生效:

  • 打开Chrome开发者工具的Network面板,勾选「Disable cache」,然后重新发起请求
  • 检查前端是否有全局请求/响应拦截器,是否无意中过滤了响应头信息

按照上面的步骤排查后,应该就能正常获取到Access-Token和Uid头部了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:55:50