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

Cordova iOS/Android端HTTPS请求CORS问题排查与配置咨询

解决Cordova打包应用HTTPS请求无法连接服务器的问题

1. 服务器端必须配置合法的CORS响应头

Cordova的白名单仅控制应用端的访问限制,服务器端必须返回合规的CORS头才能让请求正常通过,尤其是HTTPS场景:

  • 务必返回 Access-Control-Allow-Origin:生产环境建议设置为你的应用域名(测试环境可临时用*,但带凭证的请求不能用*)
  • 若使用POST/PUT/DELETE等非简单请求,需添加 Access-Control-Allow-Methods 包含对应请求方法
  • 若请求携带自定义头,需返回 Access-Control-Allow-Headers 包含这些头名称
  • 若需要携带Cookie或HTTP认证信息,需设置 Access-Control-Allow-Credentials: true,同时Access-Control-Allow-Origin不能设为*

PHP端配置示例:

header("Access-Control-Allow-Origin: https://your-app-domain.com");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
header("Access-Control-Allow-Credentials: true");

// 处理CORS预检的OPTIONS请求
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}

2. iOS端配置ATS(App Transport Security)

iOS 9及以上默认启用ATS,要求HTTPS连接满足TLS 1.2+、证书有效等标准:

  • 若服务器符合ATS要求,无需额外配置;若存在证书问题或TLS版本较低,在config.xml中添加ATS例外:
<platform name="ios">
    <edit-config target="NSAppTransportSecurity" file="*-Info.plist" mode="merge">
        <dict>
            <key>NSExceptionDomains</key>
            <dict>
                <key>your-server-domain.com</key>
                <dict>
                    <key>NSIncludesSubdomains</key>
                    <true/>
                    <key>NSTemporaryExceptionMinimumTLSVersion</key>
                    <string>TLSv1.2</string>
                    <!-- 仅测试环境使用,生产环境必须移除 -->
                    <!-- <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                    <true/> -->
                </dict>
            </dict>
        </dict>
    </edit-config>
</platform>

注意:NSAllowsArbitraryLoads设为true会关闭所有ATS限制,仅用于测试,上线前必须删除。

3. Android端网络安全配置(针对自签名/内部证书)

Android 9+默认禁止HTTP请求,使用CA颁发的合法HTTPS证书无需额外配置;若用自签名证书,需添加以下配置:

  1. 在platforms/android/app/src/main/res/xml目录下创建network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
        <domain includeSubdomains="true">your-server-domain.com</domain>
        <!-- 将自签名证书文件放在res/raw目录下 -->
        <trust-anchors>
            <certificates src="@raw/your_server_certificate"/>
        </trust-anchors>
    </domain-config>
</network-security-config>
  1. 在platforms/android/app/src/main/AndroidManifest.xml的<application>标签中引用该配置:
<application android:networkSecurityConfig="@xml/network_security_config">

4. 排查请求本身的问题

  • 确认请求URL是正确的HTTPS地址,无拼写错误
  • 检查请求是否携带了服务器未允许的自定义头
  • 确保POST请求的Content-Type符合服务器要求(如application/x-www-form-urlencoded)
  • 验证服务器是否正确响应OPTIONS预检请求(非简单CORS请求会先发送OPTIONS请求,服务器需返回200状态)

5. 检查Cordova及插件版本

确保cordova-plugin-whitelist是最新版本,运行命令更新:

cordova plugin update cordova-plugin-whitelist

同时确认Cordova核心版本不低于9.0.0,避免旧版本的兼容性问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:26:02