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