Flutter中如何检测URL是否存在并获取statusCode,解决XMLHttpRequest报错
错误原因
你遇到的XMLHttpRequest error是Flutter Web场景下的典型CORS(跨域资源共享)限制问题,本质是浏览器的安全策略拦截了跨域请求,和你编写的状态码判断逻辑本身无关。如果是在安卓、iOS、桌面端运行同款代码,不会触发该错误。
解决方案
根据你的使用场景选择对应方案:
- 本地开发调试阶段:运行项目时添加禁用浏览器安全策略的参数即可临时绕过限制,该方案仅适用于本地调试,不可用于生产环境:
flutter run -d chrome --web-browser-flag "--disable-web-security" - 请求的接口为自有可控接口:在后端服务配置CORS响应头,添加允许你的前端域名访问的规则即可。
- 请求的是第三方不可控接口:你需要自行搭建代理转发服务,由代理服务发起请求拿到结果后再返回给前端,避开浏览器的跨域限制。
代码优化建议
你的原有代码缺少异常捕获逻辑,就算没有跨域问题,遇到网络超时、404、500等异常场景也会直接崩溃,优化后代码如下:
import 'package:http/http.dart' as http; final url = Uri.parse('https://www.google.com'); void getStatusCode() async { try { http.Response response = await http.get(url); if (response.statusCode == 200) { print('exists'); } else { print('not exists'); } } catch (e) { // 可在此处捕获CORS错误、网络错误等各类异常 print('请求出错:$e'); print('not exists'); } }
内容的提问来源于stack exchange,提问作者Golf
相关产品推荐
相关产品推荐

