【问题标题】:302 Response Error302 响应错误
【发布时间】:2017-06-11 00:17:39
【问题描述】:

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

我在 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 并获取要重定向的位置标头,但我想避免这种情况,因为它在技术上是重定向响应。

【问题讨论】:

标签: javascript cors axios


【解决方案1】:

您的请求triggers your browser to first send a CORS preflight OPTIONS request 中的'customHeader':'token' 部分。 任何您添加到请求的标头(定义为CORS-safelisted request-headers 的标头除外)都会触发浏览器发送 CORS 预检 OPTIONS 请求。

您没有从 Postman 获得此信息的原因是,与浏览器引擎不同,Postman 不实现 CORS,因此它不发送 OPTIONS 请求。 (Postman 不在浏览器为 Web 应用程序强制实施的同源 Web 安全模型下运行。)

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

【讨论】:

  • 我有其他可以正常工作的端点(GET、POST、DELETE、PUT 和 OPTION)与 CORS 预检 OPTIONS 请求一起工作,但返回 302 响应的端点除外。我不太清楚您所说的“以触发浏览器执行 CORS 预检的任何方式构建您的请求”是什么意思,这是否意味着我必须将位置标头添加到我的请求中?
猜你喜欢
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 2022-10-02
  • 1970-01-01
  • 2012-03-02
  • 2020-12-16
  • 2015-07-03
相关资源
最近更新 更多