【React Native 使用公网服务器HTTP地址 fetch() Network Request Failed】

前言:

使用后端本地ip地址时,网络请求正常,更换为公网服务器地址后,接口报错:
ERROR Request failed: [TypeError: Network request failed]

原因:

•	iOS 默认限制非 HTTPS 请求,所以如果公网地址使用的是 HTTP 而不是 HTTPS,iOS 可能会阻止请求。
•	如果你的服务器使用 HTTP,可能需要在 Info.plist 中临时允许非加密请求,但建议迁移到 HTTPS。

解决:

在Info文件添加以下代码,将81.152.193.120替换为你的公网服务器地址:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSAllowsLocalNetworking</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>81.152.193.120</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
            </dict>
            <key>localhost</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>

NSAllowsArbitraryLoads:
将 NSAllowsArbitraryLoads 设置为 true,临时允许应用程序在全局范围内使用非 HTTPS 连接。iOS 默认要求使用 HTTPS,启用此项绕过了这一限制。

NSAllowsLocalNetworking:
允许应用访问局域网内的设备和资源(如 localhost 或内网 IP 地址)

NSExceptionDomains:
通过 NSExceptionDomains 字段,你可以为特定的域名(包括 IP 地址)设置例外规则

NSIncludesSubdomains:
设为 true 后,允许对该域及其所有子域的非 HTTPS 请求。例如,如果 112.150.155.145 有子域名 subdomain.112.150.155.145,它也会被允许。

NSExceptionAllowsInsecureHTTPLoads 和 NSTemporaryExceptionAllowsInsecureHTTPLoads:
这两项临时允许对指定域名的非 HTTPS 请求。在安全性上,建议将这些配置作为临时解决方案,因为苹果鼓励所有流量使用 HTTPS 加密。

NSTemporaryExceptionMinimumTLSVersion:
设置了最低的 TLS 版本(如 TLSv1.1),允许对特定的 HTTPS 连接使用较低版本的 TLS,这可以确保一些较旧的服务器或配置不被拒绝访问。

总结:

通过 Info.plist 中这些配置,iOS 可以绕过默认的 HTTPS 安全要求,使应用程序可以在特定的域名或 IP 地址上使用 HTTP 请求。如果公网服务器支持 HTTPS,建议将这些配置移除并使用 HTTPS 以提升安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值