Android的http和https知识点

核心是三个层次的能力:基础扎实度(深挖细节)Android实战经验(踩坑与优化) ,以及安全认知(防篡改与证书体系)

第一步:基础定义

"HTTP是超文本传输协议,数据明文传输;HTTPS是HTTP + SSL/TLS协议栈,对数据进行了加密。标准端口分别是80和443。"

第二步:核心差异深挖("握手与加密")

不要只提对称加密,要讲清楚混合加密体系,这是区分中级和高级的分水岭:

"HTTPS的核心在于混合加密

  1. 非对称加密(RSA/ECDHE):用于握手阶段,交换'对称加密的密钥'(Pre-Master Key),解决密钥配送问题。

  2. 对称加密(AES):用于实际数据传输,速度快。

现代HTTPS(TLS 1.3)已经不再使用RSA做密钥交换,而是改用 ECDHE(椭圆曲线迪菲-赫尔曼) 。因为它支持前向保密(PFS)------即使服务器私钥泄露,以前的历史流量也无法被解密。这一点对金融级App至关重要。"


第三步:SSL/TLS握手流程(展现网络协议功底)

"完整的TLS握手(以TLS 1.2为例)包括:

  1. Client Hello:客户端发送随机数+支持的加密套件。

  2. Server Hello :服务端返回随机数+选好的加密套件+CA颁发的数字证书

  3. 证书校验(客户端):校验证书链、域名、有效期,并取出公钥。

  4. Pre-Master生成:客户端生成一个随机密钥,用公钥加密传给服务端。

  5. 会话密钥计算:双方利用三个随机数(Client/Server Random + Pre-Master)计算出最终的对称会话密钥。

  6. Finished:互发加密过的握手摘要,验证协商是否成功。"


第四步:Android高级工程师的"高光时刻"(实战与踩坑)

"在Android层面,我们不仅要懂原理,更要解决实际痛点:
1. 证书校验与抓包冲突(网络安全配置)

在Android 7.0(API 24)以上,系统默认只信任系统CA证书,不信任用户CA证书。这导致Charles/Fiddler抓包抓不到HTTPS明文。

  • 做法:通过 network_security_config.xml 配置 debug-overridescertificates 源。

  • 风险 :如果上架包开启user信任,就等于把App暴露给中间人攻击,所以Release包必须强制使用系统证书或不配置debug。

2. SSL Pinning(证书绑定)------ 防中间人攻击的杀手锏

面试官如果追问安全,我会说:我们会在OkHttp里做 CertificatePinner,将服务端公钥的SHA-256哈希值写死在代码里。握手时比对,不一致直接报错断开。

  • :证书过期或更换时,必须提前下发新公钥或通过热修复更新,否则会导致大面积网络崩溃。

3. 性能优化(复用Session)

HTTPS完全握手需要2个RTT,耗时较长。我会在OkHttp中配置 ConnectionPool,并开启 Session Resumption(会话恢复),利用Session ID或Session Ticket复用之前的会话,把后续请求的握手降到0-RTT或1-RTT,显著提升弱网下的首屏速度。"


第五步:进阶区别(HTTP/2 与 HTTPS 的强关联)

"现在的Android主流网络库(OkHttp 4.x)默认支持HTTP/2。注意: 主流浏览器和Android应用强制要求 HTTP/2 over TLS(即必须用HTTPS)。HTTPS不仅保证安全,更是支持多路复用、头部压缩(HPACK)的前提条件。"


第六步:总结升华(展现技术视野)

"总结一下:HTTP是基础,HTTPS是标准。在高级工程实践中,HTTPS已经不是'选配'而是'标配'。我会把它当成一个全链路监控环节 ------在底层自定义TrustManager处理自签名证书以兼容测试环境,在顶层通过EventListener监听TLS握手耗时,作为性能监控的重要指标。"

这是一个非常经典的分层进阶学习地图

  • 初级 :考察**"知不知道"**(API调用与基本概念)。

  • 中级 :考察**"理不理解"**(原理机制与Android适配坑)。

  • 高级 :考察**"能不能扛"**(性能优化、安全对抗与底层协议掌控)。

🟢 第一阶段:初级工程师(基石与API层)

核心目标:能正常发起网络请求,处理基本数据,不崩溃。

知识点模块 必须掌握的详细内容
基础概念 1. HTTP/HTTPS定义、默认端口(80/443)。 2. URL结构(Scheme、Host、Port、Path、Query)。 3. HTTP报文结构(请求行/状态行、Headers、Body)。
请求方法与状态码 1. 方法 :GET(幂等)、POST、PUT、DELETE的含义。 2. 状态码:1xx(信息)、2xx(成功-200/201/204)、3xx(重定向-301/302/304)、4xx(客户端错误-400/401/403/404)、5xx(服务端错误-502/504)。
Android 原生 API 1. HttpURLConnection 的基本使用(openConnectiongetInputStreamdisconnect)。 2. 知道AsyncTaskThread + Handler做网络请求(主线程禁止网络IO)。 3. 最基本的 AndroidManifest 网络权限声明(INTERNETACCESS_NETWORK_STATE)。
常用 Header Content-Type(application/json, x-www-form-urlencoded, multipart/form-data)、User-AgentCookieAuthorization 的基本作用。

🟡 第二阶段:中级工程师(原理机制与Android适配)

核心目标:能封装网络库,解决Android版本兼容问题,理解加密流程。

知识点模块 必须掌握的详细内容(含Android特质)
HTTPS混合加密体系 1. 对称加密 (AES/DES)用于数据体加密。 2. 非对称加密 (RSA/ECC)用于加密对称密钥。 3. 哈希摘要(SHA/MD5)用于防篡改,清楚三者结合的原因(速度+安全+密钥配送)。
TLS 1.2 / 1.3 握手流程 1. TLS 1.2 完整握手 :ClientHello -> ServerHello(证书)-> 密钥交换(Pre-Master)-> 生成会话密钥 -> Finished。 2. TLS 1.3 变化 :缩减为 1-RTT(支持 Early Data / 0-RTT),砍掉不安全加密套件。 3. 必须理解 证书链校验过程(叶子证书 -> 中间证书 -> 根证书)。
Android 网络安全适配(巨坑) 1. Android 6.0 (API 23) :动态权限不影响网络,但需注意 usesCleartextTraffic。 2. Android 7.0 (API 24)严禁用户CA证书 ,默认只信任系统证书(导致Charles抓包失败)。 3. Android 9.0 (API 28) :默认禁止明文HTTP(cleartextTraffic 默认false),必须配置 network_security_config.xml 开启域名例外。 4. 配置 network_security_config.xmldebug-overridesdomain-config
OkHttp 源码与封装 1. 拦截器链(Interceptor Chain) :区分 Application InterceptorNetwork Interceptor 的执行顺序与时机。 2. 连接池复用(ConnectionPool) :Keep-Alive 机制和最大空闲连接数。 3. 重试与重定向RetryAndFollowUpInterceptor 处理认证失败和重定向逻辑。
Cookie 与 Session 管理 1. Session 基于服务端存储 + Cookie(JSESSIONID)机制。 2. 在 OkHttp 中如何通过 CookieJar 持久化保存 Cookie(内存/SharedPreferences)。

🔴 第三阶段:高级工程师(架构、性能与安全对抗)

核心目标:能设计高可用网络层,解决弱网/安全/监控痛点,具备协议级视野。

知识点模块 必须掌握的详细内容(碾压面试官的关键)
SSL/TLS 深度(前向保密与密码套件) 1. 前向保密(PFS) :详细解释 ECDHE 密钥交换算法为什么比 RSA 更安全(即使私钥泄露,历史数据不可解)。 2. 能说出几种主流 Cipher Suite (如 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)并解释每一段含义(密钥交换/认证/加密/MAC)。 3. 明确 TLS 记录层(Record Layer) 的分片、压缩(已弃用)、加解密、添加MAC头过程。
性能优化(体系化) 1. DNS优化 :HTTPDNS 绕过运营商 LocalDNS 劫持,实现精准调度与防DNS劫持。 2. 连接复用 :开启 OkHttp RetryAndFollowUpInterceptor 配合 HTTP/2 多路复用。 3. 弱网监控 :利用 OkHttp EventListener 监听 connectStartsecureConnectStart(TLS握手耗时)、responseBodyStart,构建全链路监控(监控握手耗时占比通常达 60%+)。 4. 请求合并与优先级:图片/文件的并发限制与队列优先级调度。
安全加固与防抓包(军备竞赛) 1. SSL Pinning(证书/公钥绑定) :实现 OkHttp 的 CertificatePinner,将公钥 SHA-256 写死在代码里,对抗中间人攻击(需配套证书紧急更换的服务器下发策略)。 2. 双向认证(Mutual TLS / ClientAuth) :服务端要求客户端携带证书,用于金融级身份验证。 3. 防抓包 :检测网络是否开启代理(ProxySelector),检测 VPN 环境;在 so 层实现 SSL_CTX 自定义验证(增加逆向难度)。 4. HSTS(HTTP Strict Transport Security):强制浏览器/客户端只能用 HTTPS 访问,防止 SSL 剥离攻击。
HTTP/2 与 QUIC 协议进阶 1. HTTP/2 特性 :二进制分帧、多路复用(解决队头阻塞)、HPACK 头部压缩、Server Push。 2. Android 适配 :OkHttp 如何通过 ALPN 协商升级 HTTP/2(必须基于 HTTPS)。 3. QUIC(HTTP/3):基于 UDP,解决 TCP 队头阻塞,0-RTT 连接恢复,在 Google 系App中的降级策略。
自定义 TrustManager 踩坑 1. 实现 X509TrustManager 时,必须 重写 checkServerTrusted 并调用系统默认校验,严禁 空实现(否则等于关闭所有证书校验,极其危险)。 2. 处理自签名证书时,如何区分 Debug 包(宽容)与 Release 包(严格)。 3. Android P/Q 以上对弱加密算法(如 SHA1withRSA)的禁用手册。
大型项目架构设计 1. 网络层与业务层解耦(Retrofit + OkHttp + 协程/Flow 或 RxJava)。 2. 多 BaseUrl 动态切换(灰度环境、预发布环境)。 3. 缓存策略(强制缓存 Cache-Control 与协商缓存 ETag/Last-Modified)结合 OkHttp Cache 的实现。

🎯 终极总结(高级回答的"点睛之笔")

针对"HTTP和HTTPS"引出上述高级区的 "前向保密算法性能损耗分析" + "OKHttp EventListener 全链路监控方案" + "SSL Pinning 紧急证书更换的蓝绿发布策略"

给你的学习建议: 初级看《图解HTTP》,中级源码调试 OkHttp 断点看拦截器,高级直接去啃 《RFC 8446 (TLS 1.3)》 和 查看 Conscrypt(Android默认SSL库)源码。

相关推荐
Kapaseker19 小时前
Sequence 一定比 List 快?等等,我们先从基础讲起
android·kotlin
爱刷碗的苏泓舒19 小时前
网络通信入门之 NTRIP、HTTP、TCP 与 IP 的关系:协议分层、连接过程以及实时数据流
网络协议·tcp/ip·http·网络通信·rtcm·监控运维·ntrip
AI刀刀20 小时前
deepseek 内容粘贴后符号丢失怎么办?AI 导出鸭实测解决排版乱码问题
android·人工智能·excel·ai导出鸭
东方佑20 小时前
Per-Group 混合精度量化:将 14B 视频生成模型压缩至 11 GB
android
三少爷的鞋20 小时前
Android 面试系列 : 协程为何比线程高效
android
2501_9327502620 小时前
Android 数据持久化解析
android·java
我星期八休息1 天前
网络编程—应用层HTTP协议
linux·运维·开发语言·前端·网络·网络协议·http
石山代码1 天前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·人工智能
怣疯knight1 天前
kotlin安卓应用打包编译卡死的可能原因
android·kotlin