前端获取不到自定义响应头信息解决方法

Author:think

Date:2022-01-13

背景

在一次实际项目开发过程中我将access-token以及x-access-token放置于响应头中,如下图所示:

image-20220113172824477

但是在前端获取到的response中无法看到自定义的请求头信息,即在响应数据的headers中无法看到access-token以及x-access-token的值。

原因

系统为了安全性,默认只允许前端获取到如下几个响应头:

  • Cache-Control
  • Content-Language
  • Content-Type
  • Expires
  • Last-Modified
  • Pragma

因此需要在后端进行配置。

解决方法

在后端添加响应头之后,需要在响应头中设置一个字段Access-Control-Expose-Headers,将自定义的响应头信息暴露出来供前端读取。具体实现代码如下:

// 设置响应报文头
httpContextAccessor.HttpContext.Response.Headers["access-token"] = accessToken;
httpContextAccessor.HttpContext.Response.Headers["x-access-token"] = refreshToken;
// 将自定义响应头暴露出来让前端捕获
httpContextAccessor.HttpContext.Response.Headers["Access-Control-Expose-Headers"] = "access-token,x-access-token";

其中httpContextAccessor是通过接口IHttpContextAccessor进行依赖注入实现的,从代码中可以看到后端响应头自定义的字段有access-tokenx-access-token两个,因此需要在响应头中添加Access-Control-Expose-Headersv字段,其值为自定义的字段名,用逗号隔开,且只能设置一次。

至此后端已经配置完成,前端通过axios发送请求之后得到的响应信息对象response,通过自定义的响应头信息字段名来访问responseheaders对象即可获取到响应头自定义字段的值,如下所示:

this.$axios({
    url:"/api/user/login", // 接口地址
    method:"post", // 请求方式
    // 请求体数据
    data:{
        username:"admin",
        password:"123456"
    }
}).then(response => { // 请求响应信息
    // 获取身份凭证Token
    this.access-token = response.headers["access-token"]
    // 获取刷新Token时所需的凭证refreshToken
    this.x-access-token = response.headers["x-access-token"]
})

以上代码仅是作为通用演示,正常开发过程可根据项目需求自行调整,例如获取到响应信息后即可将token存储至Vuex以及localStorage中为之后的请求提供身份凭证。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

think_mzs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值