【问题标题】:GET request works in postman but fails with AxiosGET 请求在邮递员中有效,但在 Axios 中失败
【发布时间】:2020-03-07 05:08:03
【问题描述】:

我正在向具有相同标头(包括 Bearer)的同一端点发送 GET 请求,但是当我从 Postman 调用时得到 200 和正确的 JSON,当我在我的 (Vue) 中使用 Axios 发送请求时) 项目我得到 302。

来自本地项目的调用,在 localhost:8080 上运行(如果有用的话)如下:

  const { authToken, userID } = store.getters.authUser
  const config = {
    method: 'get',
    url: '/' + userID,
    headers: {
      Authorization: `Bearer ${authToken}`,
      'Content-Type': 'application/json'
    }
  }
  axios(config)
    .then(res => {
      console.log(res)
      return res
    })
    .catch(e => {
      console.log(e)
    })

在邮递员中,我所做的只是创建一个具有相同 url 的 GET 请求,而我在标头中添加的只是“Bearer ...”

我从 axios 得到的错误是:

Error: Network Error
    at createError (createError.js?2d83:16)
    at XMLHttpRequest.handleError (xhr.js?b50d:87)

响应状态为 302 ,知道这里发生了什么吗??

userIDauthToken 的值都存在并且等于我在邮递员中使用的相同值,网址也是如此

【问题讨论】:

  • 你是否在标题中设置了 {'Content-Type': 'application/json'}?
  • 是的,我已经设置了标题
  • 你试过使用网址http://localhost:8080/${userID}吗?
  • 我没有针对本地服务器工作...请求转到另一台服务器
  • 你试过用服务器的完整地址吗?

标签: vue.js axios postman


【解决方案1】:

如你所说

请求转到另一台服务器

我最好的猜测是执行 axios 调用的页面和 axios 请求中请求的资源在不同的域上。这意味着该请求是一个跨源请求。在这种情况下,浏览器会执行preflight request(GET 请求不是CORS 意义上的simple request,因为存在Authorization 标头)。在这种情况下,您的资源需要支持CORS,这意味着您需要设置Access-Control-Allow-Origin 标头,并且需要为预检请求处理OPTIONS HTTP 方法。

【讨论】:

    猜你喜欢
    • 2021-01-14
    • 1970-01-01
    • 2018-03-29
    • 2019-08-25
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 2020-09-27
    • 2021-09-24
    相关资源
    最近更新 更多