上篇分析了http协议的请求流程,基于OKHttp框架。本篇主要分析一下https的请求。
https相对http协议,多了一层tls认证,认证结束后,会协商出会话加密密钥,后续通信就会通过该密钥来对传输中的数据进行加密。
- 如图
对比之前的http请求流程,图中,https请求主要多了如下事情。
- socket建立连接后,并不会直接发送数据
- 对于https请求,RealConnection对象会调用connectTls方法
- 方法中创建SSLSocket对象,复用socket连接。
- 和服务端进行相关验证。
- 对于X509对象证书,验证其地址和证书有效性。
- 重新生成BufferSource和BufferSink。
关于超时时间
我们直接使用http请求时候,一般会设置3个时间,connectTime,ReadTime和WriteTime.
- connectTime
建立Socket后,socket和服务端进行tcp连接时候使用的连接超时时间,超时则会抛异常。
- ReadTime
使用https中才会有效,当请求需要建立隧道时候,会给BufferSource设置一个读超时
- WriteTime
使用https中才会有效,当请求需要建立隧道时候,会给BufferSink建立一个写入超时。