javascript - 302响应错误

标签 javascript cors axios

我正在向我的本地网络服务发出 GET 请求,我希望返回 302 响应并在 header 中包含一个位置。但是,我得到了一个未定义的响应和一个网络错误,即使我可以在本地看到正在处理请求并且正在创建响应而网络服务中没有任何错误。

我在 Postman 和 Chrome 中试过,它收到重定向响应并相应地重定向。

我不确定这是否是 CORS 问题,如果是,我该如何解决?

我已经在 CORS 过滤器的响应头中添加了

Access-Control-Expose-Headers: Location, [own headers]
Access-Control-Allow-Origin: '*'
Access-Control-Allow-Methods: POST, PUT, GET, OPTIONS, DELETE
Access-Control-Max-Age: [some age]
Access-Control-Allow-Headers: [own headers]

当我使用 Postman 时,位置出现在标题中

我使用 Axios 发出的请求和配置是

const config = {
  url: [someURL],
  method: 'GET',
  headers: {
    'customHeader':'token',
  },
  params: {
    [params]
  },
  maxRedirects: 0,
  validateStatus: status => (status >= 200 && status < 300) || status === 302,
};

对于为什么响应在到达我的 JS 代码时未定义,但在 Postman 和 Chrome 中运行良好,我们将不胜感激。

我可以解决这个问题的一种方法是使用 HTTP 状态代码 200 并获取要重定向的位置 header ,但我想避免这种情况,因为它在技术上是一种重定向响应。

最佳答案

请求的 'customHeader':'token' 部分 triggers your browser to first send a CORS preflight OPTIONS request . 任何 您添加到请求的 header ,而不是定义为 CORS-safelisted request-headers 的 header 触发浏览器发送 CORS 预检选项请求。

你没有从 Postman 得到这个的原因是与浏览器引擎不同,Postman 没有实现 CORS,所以它不会发送 OPTIONS 请求。 (Postman 不在浏览器为 Web 应用程序强制执行的同源 Web 安全模型下运行。)

如果服务器没有以正确的方式响应 CORS 预检选项请求,您的请求将失败,唯一的解决方法是不要将 'customHeader':'token' 部分添加到您的请求,或以任何方式构建您的请求,触发您的浏览器进行 CORS 预检。

关于javascript - 302响应错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41858010/

相关文章:

使用 CORS 重定向的 Ajax 请求在 IE11 中失败

Javascript 数学是加入而不是添加

javascript - 用户键入时 React js 输入无效(我想验证 onBlur 而不是 onChange)

javascript - 在 IE8 下,Page_Init 不会被调用

security - 当前端/后端位于两个不同的域时,CSRF 保护如何为我提供比 CORS 控制更高的安全性?

javascript - 使用 axios 和 react 从 api 获取数据

javascript - Chrome 扩展中的音频;有时有效,有时会导致空白 DOMException

javascript - 预检响应具有无效的 HTTP 状态代码 400 - aspx

javascript - NodeJS sendFile 从服务器返回空文件

javascript - 如何使用 Express.js 和 axios 更新 mongoDB 中的值