纯Dart可用的HTTP代码在Flutter运行报XMLHttpRequest错误如何解决
错误原因
你遇到的XMLHttpRequest error本质是CORS(跨域资源共享)限制:
- 纯Dart命令行运行环境没有同源策略校验规则,所以请求可以正常发送并拿到返回结果
- 当Flutter应用运行在Web平台时,浏览器会自动对跨域请求做CORS校验,你调用的目标站点没有配置允许你的应用域名跨域访问的响应头,浏览器就会直接拦截请求抛出该错误。
解决方案
方案1:切换运行平台
如果你不需要适配Web端,仅开发安卓、iOS或者桌面端应用,直接在对应平台的模拟器/真机上运行即可,这类平台没有CORS限制,原有代码无需修改即可正常运行。
方案2:新增代理层中转请求
如果必须适配Web平台,需要新增代理层绕过跨域限制:
- 自行搭建后端服务,Flutter Web端仅向你自己的后端发送请求
- 由你的后端服务转发请求到目标站点,拿到结果后再返回给前端
- 你的后端服务配置允许你的Flutter Web域名的CORS访问规则即可。
方案3:本地开发临时绕过(仅适用于调试,不可用于生产环境)
Web端开发调试阶段,可以通过禁用浏览器安全策略临时绕过CORS限制:
- Windows平台运行命令:
flutter run -d chrome --web-browser-flag "--disable-web-security" - macOS平台先执行命令启动禁用安全策略的Chrome:
open -n -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir="/tmp/chrome_dev_test" --disable-web-security,再运行Flutter Web项目即可。
注意事项
- 不要在生产环境的Web应用中直接调用第三方未开放CORS的接口,临时调试的绕过方案对普通用户无效
- 调用第三方站点接口前请确认对方的使用许可,避免违规爬取内容的法律风险。
内容的提问来源于stack exchange,提问作者aNOOBis
相关产品推荐
相关产品推荐

