axios 获取服务端自定义设置的响应头问题

一、问题引入

前端post请求文件下载,需要获取响应头中的文件名,文件名由后端放在自定义响应头中,或者放在Content-Disposition响应头中,本地调试获取不到自定义响应头数据

二、问题解决

思路:

1.首先检查响应拦截器是否直接返回的res.data,这个时候获取的是不包含请求头的,所以拦截器那里需要修改按照自己封装得返回得,就是要返回所有

 2.检查netWork接口响应头

 3.是否设置了响应头进行暴露对应的Content-Disposition

 三、问题说明

“Access-Control-Expose-Headers”:首先得注意是"Access-Control-Expose-Headers"进行跨域请求时响应头部中的一个字段,对于同域请求,响应头部没有这个字段

在使用CORS解决跨域的请求中,默认只能取到五个reponse header 值

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

服务端需要设置 Access-Control-Expose-Headers 字段

Access-Control-Expose-Headers : sessionID , key1 , key2, token

前端能在响应中拿到:

axios:

axios.interceptors.response.use(function (response) {
  console.log(response);
  return response;
}, function (error) {
  return Promise.reject(error);
});

说明:代码打包到线上环境或者和服务端同源环境,前端可以直接拿到自定义响应头,服务端无需设置 Access-Control-Expose-Headers 字段

四、转码问题

Http报头中不能添加中文字符,否则报错,需要进行编码

推荐使用: Uri.EscapeDataString 

 js方面:

encodeURIComponent 和 decodeURIComponent 可以编码和解码URI特殊字符(如#,/,¥等),而decodeURI则不能

posted @ 2022-09-14 16:28  盼星星盼太阳  阅读(1865)  评论(0编辑  收藏  举报