当前位置:   article > 正文

vue发起axios请求中设置Authorization请求头_responsetype axios请求头设置

responsetype axios请求头设置

解决方法

  1. async test() {
  2. console.log(this.jwttoken);
  3. await this.$axios({
  4. method: "post",
  5. url: '/home',//这里的地址已提前通过main.js提前配置默认路径
  6. responseType: "blob",//这里是指定服务器返回给我们的数据类型的可以不写
  7. headers: { Authorization: this.jwttoken },
  8. }).then(function (value) {
  9. console.log(value.data);
  10. });
  11. },

修改后可能出现的问题

Access to XMLHttpRequest at 'http://localhost:4040/home' from origin 'http://localhost:8080' has been blocked by CORS policy: Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response.

原因在于后端没有配置好跨域策略,这里我引用的是'cors'。

npm i cors//通过npm在服务器端下载cors
  1. // 加载cors,配置跨域资源共享
  2. const cors = require('cors')
  3. //挂载至服务器
  4. app.use(cors())

问题起因

本次问题起源于在为vue前端设置发起post请求,因为jwt身份认证机制需要携带jwttoken在响应头中,但在两次测试中前端的请求均被后端expressJwt组件过滤

  1. //前端post请求代码
  2. async test() {
  3. await this.$axios
  4. .post("/home", {
  5. headers: {
  6. //头部参数
  7. "Authorization":this.jwttoken,
  8. },
  9. })
  10. .then(function (value) {
  11. console.log(value.data);
  12. });
  13. },

此时后端打印的响应头为

  1. {
  2. host: 'localhost:4040',
  3. connection: 'keep-alive',
  4. accept: '*/*',
  5. 'access-control-request-method': 'POST',
  6. 'access-control-request-headers': 'content-type',
  7. origin: 'http://localhost:8080',
  8. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.47',
  9. 'sec-fetch-mode': 'cors',
  10. 'sec-fetch-site': 'same-site',
  11. 'sec-fetch-dest': 'empty',
  12. referer: 'http://localhost:8080/',
  13. 'accept-encoding': 'gzip, deflate, br',
  14. 'accept-language': 'zh-CN,zh;q=0.9'
  15. }
  16. {
  17. host: 'localhost:4040',
  18. connection: 'keep-alive',
  19. 'content-length': '194',
  20. 'sec-ch-ua': '"Microsoft Edge";v="117", "Not;A=Brand";v="8", "Chromium";v="117"',
  21. accept: 'application/json, text/plain, */*',
  22. 'content-type': 'application/json',
  23. 'sec-ch-ua-mobile': '?0',
  24. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.47',
  25. 'sec-ch-ua-platform': '"Windows"',
  26. origin: 'http://localhost:8080',
  27. 'sec-fetch-site': 'same-site',
  28. 'sec-fetch-mode': 'cors',
  29. 'sec-fetch-dest': 'empty',
  30. referer: 'http://localhost:8080/',
  31. 'accept-encoding': 'gzip, deflate, br',
  32. 'accept-language': 'zh-CN,zh;q=0.9'
  33. }

可以看到并不存在我们设置的token,此时我们使用postmen对端口进行测试

此时我们再查看服务器打印的信息,可以清楚的看到我们发起的token

  1. {
  2. authorization: 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluMSIsImlhdCI6MTY5NjE0NTg0MiwiZXhwIjoxNjk2MjMyMjQyfQ.CS9h-0Ps-EKTVuSXChexfD7UHANqv4FjY9KTA7WinhI',
  3. 'user-agent': 'PostmanRuntime/7.33.0',
  4. accept: '*/*',
  5. 'postman-token': '40f41e4d-9d15-4f36-a12f-3acf02429581',
  6. host: '127.0.0.1:4040',
  7. 'accept-encoding': 'gzip, deflate, br',
  8. connection: 'keep-alive',
  9. 'content-length': '0'
  10. }

问题所在

因此我们可以分析出原因==》我们使用的设置的请求头并不在发起的post请求头中

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/283594
推荐阅读
相关标签
  

闽ICP备14008679号