如何在JavaScript中获取CORS预检请求的响应状态码?
关于获取CORS预检请求状态码的问题
嘿,这个问题其实挺常见的——浏览器出于同源策略的安全限制,不会把CORS预检请求的响应状态码直接暴露给JavaScript代码。
给你拆解下原因:预检请求(也就是OPTIONS方法的请求)是浏览器自动发起的「前置检查」,整个过程对咱们写的JS代码是完全透明的。只有当预检请求通过时,浏览器才会继续发送你真正的GET请求;如果预检失败(比如服务器返回403、404这类状态码),浏览器会直接终止整个请求流程,触发onerror事件,但不会把预检的具体状态码、响应内容这些细节交给JS。
你当前代码里打印的状态码: 0,其实是浏览器在跨域请求失败(包括预检失败)时返回的通用状态值,并不是预检请求的真实状态码。
替代思路
虽然没法在代码里直接拿到预检的状态码,但可以通过一些间接方式判断问题:
- 当
onerror触发且requestInCheck.status === 0时,基本可以判定是跨域相关的问题(大概率是预检失败) - 如果需要排查具体的预检状态码,只能通过浏览器的开发者工具(Network面板)查看:找到那个
OPTIONS方法的请求,就能看到它的真实状态码(比如403表示服务器拒绝跨域,404表示预检接口不存在等),不过这只能用于调试,没法在代码里获取。
给你当前代码的小优化
可以在onerror里补充更明确的判断逻辑:
requestInCheck.onerror = () => { console.log(`请求失败,大概率是跨域预检未通过`); // 跨域失败时status固定为0 if (requestInCheck.status === 0) { serviceAcception = false; this.setState({ serviceAcception }); } }
内容的提问来源于stack exchange,提问作者Κύριε ἐλέησον
相关产品推荐
相关产品推荐

