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 ,知道这里发生了什么吗??
userID
和 authToken
的值都存在并且等于我在邮递员中使用的相同值,网址也是如此
【问题讨论】:
你是否在标题中设置了 '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秒内从邮递员那里得到响应