跨域请求报错:预检请求未通过访问控制检查,禁用浏览器安全则正常
问题原因解析
- 首先明确:浏览器发起非简单跨域请求时,会自动先发送一个
OPTIONS预检请求,用来确认目标服务器是否允许后续的实际请求。你遇到的报错,本质是这个OPTIONS请求的响应状态码不是2xx(比如404、403、500这类),浏览器判定预检不通过,就拦截了实际请求。 - 你说“禁用目标服务器的所有CORS设置”,但大概率是服务器没有正确处理OPTIONS请求——比如服务器路由里没配置OPTIONS请求的处理规则,或者处理逻辑返回了错误状态码。哪怕关闭了CORS相关限制,服务器也得正常响应OPTIONS请求,返回200或204这类成功状态,预检才能通过。
- 而
--disable-web-security参数直接让浏览器跳过了所有同源策略的校验,包括预检请求的检查环节。这时候浏览器不管服务器的OPTIONS响应是什么,都会直接发送实际的跨域请求,自然就不会有报错了。
内容的提问来源于stack exchange,提问作者Abhay.Mahalley
相关产品推荐
相关产品推荐

