开发者学堂课程【HTTPDNS:最佳实践】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/408/detail/5247
HTTPDNS-最佳实践
内容介绍
一、 产品概述
二、 产品功能
三、 文档与帮助
一、产品概述
HTTPDNS 使用 HTTP 协议进行域名解析,代替现有基于 UDP 的 DNS 协议,域名解析请求直接发送到网里云的 HTTPDNS 服务器,从而绕过迟商的 Local DNS ,能够避免 Local DNS 道成的域名劫持问题和调度不精准问题。
基于 HTTPDNS 的稳定性优势,众多客户信任并使用阿里云 HTTPDNS 产品。
二、产品功能
简洁的 API 接口,简单通用
HTTPDNS 对外提供简洁的 API 接口,典型场景是移动端 APP 直接调用该接口解析域名,也支持在服务端调用的场景。
对于移动端的场景,提供完整的 AndroldIOS 使用示例。安全、精准的解析结果。
使用 HTTP 协议访问阿里云的服务端获得域名解析结果,绕过运营商的 Local DNS .避免域名劫持。
由于运营商策略的多样性,其 Local DNS 的解析结果可能不是最近,最优的节点, HTTPDNS 能够 直接得到客户端的出口网关 IP ,从而能够更准确地判断客户瞒的地区和运营商,得到更精准的解析结果。
全网域名支持
支持全网域名的解析,包括在阿里云(万网)注册的域名,和其它第三方的域名。
三、文档与帮助
HTTPS (含SNI) 业务场景“ IP 直连"方案 说明
1. 背景说明
本文主要介绍 HTTPS (含SN)业务场景下在 Androld 端和 IOS 端实现 IP 直连"的通用解决方案。如果您是 Android 开发者,并且以 OkHttp 作为网络开发框
架,由于 | OkHttp 提供了自定义 DNS 服务接口可以优雅地实现 IP 直连。
其方案相比通用方案更加简单且通用性更强,推荐您参考 HttpDns+OHkHttp 最佳实践接入 HttpDns。
1.1 HTTPS
发送 HTTPS 请求首先要进行 SSL/TLS 握手,握手过程大致如下:
1.客户端发起握手请求,携带随机数、支持算法列表等参数。
2.服务端收到请求,选择合适的算法,下发公钥证 书和随机数。
3.客户端对服务端证书进行校验,并发送随机数信息,该信息使用公钥加密。
4.服务端通过私钥获取随机数信息。
5.双方根据以上交互的信息生成 session ticket ,用作该连接后续数据传输的加密密钥。
上述过程中,和 HTTPDNS 有关的是第3步, 客户端需要验证服务端下发的证书,验证过程有以下两个要点:
1.客户端用本地保存的根证书解开证书链,确认服务端下发的证书是由可信任的机构颁发的。
2.客户端需要检查证书的 domain 城和扩展域,看是否包含本次请求的 host。
如果上述两点都校验通过,就证明当前的服务端是可信任的,否则就是不可信任,应当中断当前连接。
当客户端使用 HTTPDNS 解析域名时,请求 URL 中的 host 会 被替换成 HTTPDNS 解析出来的 IP ,所以在证书验证的第2步,会出现 domain 不匹配的情况,导致 SSLTLS 握手不成功。
2. HTTPS 场景(非SNI) 解决方案
针对" domain 不匹配”问题,可以采用如下方案解决: hook 证 书校验过程中第2步,将 IP 直接 替换成原来的域名,再执行证书验证。
如何利用 HTTPDNS 降低 DNS 解析开销
慢更新策略:
绝大多数场景下业务域名的 IP 信息变更并不频繁,特别是在单次 APP 的使用周期内,域名解析获取的 lP 往往是相同的(特殊业务场景除外) .因此我们可以利用 DNS 懒更新策略来实现 TTL 过期后的 DNS 快速解析。
所谓 DNS 侧更新策略即客户端不主动探测域名对应 IP 的 TTL 时间,当业务请求需要访问某个业务城名时,查询内存缓存并返回该业务域名对应的 lP 解析结果。如果 lP 解析结果的 TTL 已过期,则在后台进行异步 ONS 网络解析与缓存结果更新。通过上述策略,用户的所有 DNS 解析都在与内存交换,避免了网络交引入的延迟。
HTTPDNS 域名解析厂景下如何使用 Cookie?
你使用的问题那么这个里面的话呢在云栖社区里面会有一个详细的说明,也是说的很详细的包括怎么样去配置怎么样去指定 domain 然后配置策略 iOS 的配置情况等等。
HttpDns+OkHttp 最佳实践
.总结
相比于通用方案 , OkHttp+HttpDns 有以下两个主 要优势:
●实现简单,只需通过实现 Dns 接口即可接入 HttpDns 服务
●通用性强,该方案在 HTTP5,SNI 以及设置 Cookie 等场景均适用。规避了证书校验,域名检查等环节
WebView 业务场景“lP 直连”方案说明
●通过重写 WebViecClient 中以下方法拦截 WebVew 的网络请求,获取请求 URL host 进行 HTTPONS 城名解析。解析完成后处理方式和普通网络请求一致,替换 URL .host 字段,设置。
HTTP Header Host 域,最后返回新请求对应的
WebResourceResponse。
1. /**
2. * 拦截 webView 网络请求(Android API < 21)
3. *只能拦截网络请求的 URL 请求方法、请求内容等无法拦截
4. */
5. public WebResourceResponse shouldInterceptRequest (WebView view,
6. String ur1);
7.
8. /**
9,* 拦截 webView 网络请求(Android API >= 21)
10.通过解析 webResourceRequest 对象获取网络请求相关信息
12. public WebResourceResponse shouldInterceptRequest (WebView view,
13. webResourceRequest request);