GET 请求在邮递员中有效,但在 Axios 中失败

Posted

技术标签:

【中文标题】GET 请求在邮递员中有效,但在 Axios 中失败【英文标题】:GET request works in postman but fails with 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吗? 我没有针对本地服务器工作...请求转到另一台服务器 你试过用服务器的完整地址吗? 【参考方案1】:

如你所说

请求转到另一台服务器

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

【讨论】:

以上是关于GET 请求在邮递员中有效,但在 Axios 中失败的主要内容,如果未能解决你的问题,请参考以下文章

在邮递员中上传文件有效,但在 axios 中会引发 500 错误

axios在20秒内给出响应,但具有相同请求有效载荷的相同api在6秒内从邮递员那里得到响应

获取请求适用于邮递员,但适用于浏览器

浏览器没有响应,但在邮递员中得到 401

使用邮递员的 GET 请求有效,但不适用于 python (HTTPSConnectionPool)

Axios GET请求在我的本地版本上运行,但在Heroku上失败-未捕获(承诺)错误:请求失败,状态码为500