302响应错误

时间:2017-01-25 17:34:33

标签: javascript cors axios

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

1 个答案:

答案 0 :(得分:2)

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

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

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