【问题标题】:How to get the status code of a CORS http failed preflight requets如何获取 CORS http 失败的预检请求的状态码
【发布时间】:2018-05-04 20:59:26
【问题描述】:
是否可以获取失败的预检请求的错误代码,以便我可以打印有意义的错误消息? (或者有没有习惯为所有失败的预检请求打印静态错误,无论代码如何?)
显然,状态码401 打印到控制台,但错误处理程序或.catch() 语句只接收抛出的错误对象。
如果我删除触发预检的标头,我可以自己处理响应,并且可以提取状态代码。
// 另请注意,第一个屏幕截图中返回的代码 401 是错误的。但那是another question..
【问题讨论】:
标签:
javascript
cors
http-status-codes
preflight
【解决方案1】:
很遗憾没有。所有fetch 返回的是一个TypeError,带有消息“无法获取”。
> fetch('https://stackexchange.com/404').then(x => console.info(x), error => console.error(error))
× TypeError: Failed to fetch
我尝试手动发送另一个预检请求并获取它的响应代码。
> fetch('https://stackexchange.com/404', { method: 'OPTIONS' }).then(x => console.info(x), error => console.error(error))
× TypeError: Failed to fetch
但这只会触发另一个预检,并且仍然不允许我处理实际失败的请求。
【解决方案2】:
不,不是。
如果预检响应的状态码不是 200,则同源策略将阻止从其中提取有关响应的任何信息。
出于这个原因,我刚刚完成了一个 Web API 的设置,以始终为 OPTIONS 请求返回 200 OK 状态。