You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android模拟器中Expo(React Native+Symfony API)无法允许混合内容

解决Expo React Native与Symfony API的混合内容及CORS问题

一、关闭Expo的HTTPS强制,改用HTTP

你当前的packagerOpts设置了https: true,这是强制开启HTTPS的原因,改成false并配合启动参数确保生效:

  1. 修改app.json(或app.config.js)的packagerOpts:
"packagerOpts": {
  "https": false
}
  1. 启动Expo时追加命令行参数,强制禁用HTTPS:
npx expo start --https false
  1. 你已经通过expo-build-properties配置了usesCleartextTraffic: true,这个配置是对的,确保安卓允许明文HTTP请求,若未生效,可尝试清除Expo缓存后重启:
npx expo start --clear --https false

二、优化Symfony Nelmio CORS配置

你的基础配置已经开放,但结合本地开发场景,调整细节避免潜在问题:

  • 当开启allow_credentials: true时,allow_origin用通配符*可能被浏览器/模拟器限制,建议明确指定Expo的HTTP地址(比如本地IP+端口):
nelmio_cors:
  defaults:
    allow_credentials: true
    allow_origin: ['http://localhost:8081', 'http://192.168.1.100:8081'] # 替换为你的Expo实际地址
    allow_headers: ['*']
    allow_methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']
    expose_headers: ['Authorization', 'Content-Type']
    max_age: 3600
  paths:
    '^/api/': ~ # 仅对API路径应用CORS规则
  • 重启Symfony服务,确保配置生效:
symfony server:start --allow-http

三、安卓模拟器的网络适配

安卓模拟器无法直接通过localhost访问宿主机服务,需替换为特殊IP或局域网IP:

  • 用10.0.2.2替代localhost(对应宿主机的本地服务),比如API请求地址改为http://10.0.2.2:8000/api
  • 或使用你的电脑局域网IP(如192.168.x.x),确保模拟器和电脑在同一网络下

四、排查验证

  1. 确认Expo启动后控制台显示的是HTTP地址(而非HTTPS)
  2. 用Chrome DevTools远程调试安卓模拟器的应用,查看Network面板的请求错误信息,明确是CORS还是混合内容问题
  3. 测试Web端用HTTP正常后,模拟器端按上述配置替换API地址即可正常访问

内容的提问来源于stack exchange,提问作者uphill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 21:42:42