影评周公子 2025-05-23 20:50 采纳率: 98.5%
浏览 6
已采纳

Android 无法打开 HTTP 网站,可能是由于明文流量限制或网络配置问题导致的。

在Android 9.0及以上版本中,系统默认禁止应用访问明文流量(HTTP),以提高安全性。这可能导致部分Android应用无法正常访问HTTP网站。主要原因是`android:usesCleartextTraffic`属性默认值被设置为`false`,从而阻止了未加密的HTTP请求。 解决此问题的方法有两种:一是将`android:usesCleartextTraffic="true"`添加到`AndroidManifest.xml`文件的应用标签中;二是通过配置`network_security_config.xml`文件,明确允许特定域名或所有域名使用明文流量。需要注意的是,允许明文流量可能带来安全风险,建议尽量使用HTTPS协议替代HTTP,确保数据传输的安全性。此外,还需检查网络配置是否正确,例如DNS设置、代理配置等,避免因网络环境问题导致HTTP网站无法访问。
  • 写回答

1条回答 默认 最新

  • 巨乘佛教 2025-05-23 20:51
    关注

    1. 问题概述

    在Android 9.0及以上版本中,系统默认禁止应用访问明文流量(HTTP),以提高安全性。这可能导致部分Android应用无法正常访问HTTP网站。主要原因在于`android:usesCleartextTraffic`属性的默认值被设置为`false`,从而阻止了未加密的HTTP请求。

    • 问题背景:从Android 9.0开始,Google为了提升用户数据的安全性,默认情况下禁用了明文流量(HTTP)通信,强制开发者使用更安全的HTTPS协议。
    • 影响范围:所有运行在Android 9.0及更高版本上的应用程序,如果依赖HTTP进行网络通信且未正确配置,将无法正常工作。

    2. 原因分析

    Android系统的这一改动旨在减少敏感信息通过不安全的网络传输时被窃取的风险。以下是具体原因分析:

    1. 安全性不足:HTTP协议不加密数据,容易被中间人攻击或嗅探。
    2. 默认配置限制:`android:usesCleartextTraffic="false"`是Android 9.0及更高版本中的默认行为。
    3. 兼容性问题:部分老旧服务器或服务可能仅支持HTTP,导致应用无法正常访问。

    此外,还需要检查网络配置是否正确,例如DNS设置、代理配置等,避免因网络环境问题导致HTTP网站无法访问。

    3. 解决方案

    针对上述问题,有两种主要解决方案:

    方法描述优点缺点
    修改`AndroidManifest.xml`将`android:usesCleartextTraffic="true"`添加到应用标签中。简单易行,适用于快速修复。全局允许明文流量,存在安全隐患。
    配置`network_security_config.xml`通过配置文件明确允许特定域名或所有域名使用明文流量。灵活性高,可精确控制哪些域名可以使用HTTP。需要额外配置文件,开发复杂度稍高。

    4. 实现步骤

    以下是两种解决方案的具体实现步骤:

    4.1 修改`AndroidManifest.xml`

    在`AndroidManifest.xml`文件的应用标签中添加以下属性:

    <application
        android:usesCleartextTraffic="true"
        ...>
    

    4.2 配置`network_security_config.xml`

    创建`network_security_config.xml`文件,并将其放置在`res/xml/`目录下:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">example.com</domain>
        </domain-config>
    </network-security-config>
    

    然后在`AndroidManifest.xml`中引用该配置文件:

    <application
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
    

    5. 安全性建议

    虽然可以通过上述方法解决HTTP访问问题,但建议尽量使用HTTPS协议替代HTTP,确保数据传输的安全性。以下是几点安全性建议:

    1. 逐步迁移至HTTPS,减少对HTTP的依赖。
    2. 在`network_security_config.xml`中仅允许必要的域名使用明文流量。
    3. 定期检查网络配置,确保DNS和代理设置正确无误。

    通过以上措施,可以在保证功能正常的同时,最大限度地降低安全风险。

    6. 流程图

    以下是解决问题的整体流程图:

    graph TD;
        A[发现问题] --HTTP请求失败--> B[检查系统版本];
        B --Android 9.0及以上--> C[确认`usesCleartextTraffic`];
        C --默认值为false--> D[选择解决方案];
        D --方案1--> E[修改`AndroidManifest.xml`];
        D --方案2--> F[配置`network_security_config.xml`];
        F --完成配置--> G[测试应用];
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 5月23日