技术分享 HTTPS环境DNS优化_光环大数据培训
- 格式:pdf
- 大小:359.17 KB
- 文档页数:8
全球大数据产业发展现状与应用趋势_光环大数据培训光环大数据培训,拥有强大的教研团队,根据企业需要的技术、融合新的技术开发课程。
光环大数据理论理论+实战相结合的教学方式,学员边学习边参加实战项目,既能学到全面的技能知识,同时也具备了项目开发经验,毕业自然好找工作!1 大数据发展概述当今是一个数据爆发增长的时代。
移动互联网、移动终端和数据传感器的出现,使数据以超出人们想象的速度快速增长。
据调查机构估测,数据数量一直在快速增加,这个速度不仅是指数据流的增长,而且还包括全新的数据种类的增多。
目前数据容量增长的速度,已经大大超过了硬件技术的发展速度,并正在引发数据存储和处理的危机。
据统计,2013年全球产生的数据达到3.5泽字节,到2020年产生的数量将增至44泽字节。
“大数据”一词来自于未来学家托夫勒于1980年所著的《第三次浪潮》。
最早开始对大数据进行应用探索的是2005年雅虎公司的Hadoop项目。
Hadoop其最初只是用来解决网页搜索问题的一个项目,后被Apache Software Foundation 公司引入并成为开源应用。
Hadoop是由多个软件产品组成的一个生态系统,这些软件产品共同实现全面功能和灵活的大数据分析。
世界上许多国家都已经认识到了大数据所蕴含的重要战略意义,纷纷开始在国家层面进行战略部署,以迎接大数据技术革命正在带来的新的机遇和挑战。
以美国为代表的发达国家在推进大数据上已经形成了从发展战略、法律框架到行动计划的完整布局。
2 全球各国大数据的发展现状美国在《大数据研究和发展倡议》中,提出将通过收集庞大而复杂的数字资料,从中获得知识和洞见,以提升能力。
并协助加速在科学、工程上发现的步伐,强化美国国土安全,转变教育和学习模式。
根据这一计划,美国希望利用大数据技术实现在多个领域的突破,包括科研教学、环境保护、工程技术、国土安全、生物医药等。
其中具体的研发计划涉及了美国国家科学基金会、国家卫生研究院、国防部、能源部、国防部高级研究局、地质勘探局等6个联邦部门和机构。
光环大数据培训_大数据应用案例电信用户分群精准画像的7个步骤光环大数据培训机构,工作中最困难的还是数据源的采集和结构化数据的获取,比如曾经做用户的手机上网行为画像,需要采集手机上网日志数据,并转化为兴趣点数据。
需要数据分析狮提出数据需求、采集规则、计算口径等非常详细的方案,期间还得与业务和数据采集部门深入合作。
简而言之,就是,数据分析狮不仅仅是呆板的技术人员,而且能沟通协调、整合资源的多面手。
本期,他带来了一个电信用户分群案例,与大家分享。
1、业务问题背景某省电信运营商e8套餐(宽带+固话)升级e9(宽带+固话+手机)的主要业务目标为针对e8客户加装电信C网号码并购买手机,升级为e9融合套餐或e9自主套餐用户。
即,通过电信的自身的宽带客户资源,进行精准电话营销,促使用户购买手机,从而提升电信在手机市场的占有率。
2、数据理解:e8升e9的数据理解3、确定分析对象本环节关键点:缩小分析基础客户群范围,从表中238万宽带客户中筛选出24万符合业务目标的e8客户,作为数据挖掘的基础客户群具体步骤:常用的数据挖掘基础客户群筛选维度如下:∙客户群筛选,如宽带客户、手机客户、固话客户∙套餐大类筛选:如e8、e9、乐享∙特定业务规则筛选:如活动对客户网龄、套餐档位的限定∙互斥协议等筛选:根据活动规则,对已有互斥协议的客户进行筛选分析对象筛选流程:以e8升e9为例,根据前期业务和数据理解,本次挖掘的基本目标客户为e8用户,且在同账户下无C网手机。
注,具体操作方法:∙e8客户筛选操作:选择客户“套餐类型”字段为“e8”的客户∙e8客户无C网手机筛选过程:将所有e8客户的ACC_ID字段与“CDMA单月宽表”进行关联,能关联出C网号码的即视为同账户下有C网手机。
形成241243数据样本。
4、变量筛选以e8升e9案例中变量处理为例,具体筛选流程如下:∙通过对67个字段明显无关字段初步筛选后获得18个主要字段。
∙此后,需根据字段理解对有明显相关性的变量进行筛选合并,如下面表格中的红色字段,宽带上行流量、宽带下行流量和宽带总流量三个字段存在明显的关联关系,因此根据业务需求可直接只选择宽带总流量进行分析即可。
dns怎么设置-dns优化的方法dns怎么设置-dns优化的方法不知道大家有没使用过自己设置dns来最大化优化电脑网络速度,设置dns大家都比较陌生,因为一般也很少去提到,因为电脑一般默认的都是自动获取dns,无需我们去设置,但大家应该听说过电脑能上QQ但是打不开网页的情况吧,这些也与dns设置有关噢,下面小编给大家介绍下dns是什么意思以及dns怎么设置。
dns是什么意思DNS是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
它是由解析器和域名服务器组成的。
域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。
其中域名必须对应一个IP地址,一个IP地址可以同时对应多个域名,但IP地址不一定有域名。
dns怎么设置以下介绍2种dns设置方法,一种是手动设置,另外一种是使用软件来设置。
方法一:手动设置dnswindows xp系统进入dns设置的方法:开始 - 控制面板 - 网络连接 - 本地连接 - (右键)属性------internet 协议(TCP/IP)- 属性我们就能看到默认的设置了。
也可以从电脑桌面上的网上邻居里进入,进入dns设置界面如下:Vista或windows 7系统进入dns设置方法如下:进入方法其实与windows xp是基本一样的,开始- 控制面板- 网络和共享中心 - 本地连接后面的查看状态 - (右键)属性 - internet 协议4 (TCP/IPv4)- 属性就可以进入设置了,如下图。
进入设置之后我们就可以手动修改了,开始默认是自动获取,如果我们需要设置dns的.话需要选种“使用下面的DNS 服务器地址(E)”之后才可以填写上dns地址。
dns怎么设置,地址怎么填写?那么dns地址怎么填呢?如上图填写的是上海电信地区用户的dns 地址,大家可以根据自己所在地宽带运营商的实际DNS服务器地址设置,可以联系网络运营商来获取,也可以通过网上查找资料来获取到,一般都很容易找到,这里就不详细介绍了。
大数据培训_靠什么搞定数据分析与可视化_光环大数据培训近几年选择参加大数据培训的人越来越多,光环大数据教育小编带你学习大数据,每天学一点一年成大数据高手。
事实表明,大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。
可以说数据分析是决策过程中的决定性因素,也是大数据时代发挥数据价值的最关键环节。
在这一方面,凭借着卓越的实际表现与易于上手的学习曲线,JavaScript在开发者中获得了极高人气。
事实上,多家巨头级企业已经在利用这款编程语言进行基于Web的数据分析工作。
Twitter、Facebook乃至领英都在利用基于Java的框架作为其数据工程基础设施的标准语言选项。
文章将共同了解四款出色的JavaScript库,其能够帮助大家更为轻松地完成数据分析与可视化工作。
1. Data-Driven-Documents (D3.js)大数据培训这么火的原因有很多。
在讨论JavaScript数据分析时忽略掉Data-Driven-Documents (D3),就如同在谈论微软时忽略掉其操作系统一样。
Data-Driven-Documents,亦被称为D3.js,是一套利用DOM对象实现数据操作的JavaScript库。
其能够将任意数据绑定至文档对象模型(简称DOM)当中,并利用HTML、SVG与CSS渲染将其转化为有意义信息。
D3的核心在于利用由Web标准实现的灵活性进行基于Web的数据分析与可视化处理,且可充分利用现代浏览器的全部能力而不必绑定至专有框架。
它能够以无缝化方式将数据驱动型方案同DOM操作以及强大的可视化功能加以结合。
强大的数据可视化能力是D3的最大优势。
这并不是那种只能支持特定待使用图表与图形的整体式框架。
事实上,它甚至不要求用户使用特定框架,意味着我们可以更为轻松地利用其在HTML之上实现各类极具创意的复杂且交互式可视化元素。
另外,其能够处理多种输入数据格式,包括XML、CSV与JSON。
从大数据时代来到人工智能时代的发展变化_光环大数据培训光环大数据培训机构,我们现在这个时代确实是已经从大数据时代,移到人工智能时代。
为什么这样讲呢?实际上这和大数据本身的内涵关联性比较强,为什么说关联性比较强呢?我们知道大数据本身的规模特别地大,越来越大,从原来的EB级现在正在往ZB级发展,数据本身在不停地增加,我们叫数据泛滥。
这个数据泛滥,比如和零售有关有很多数据,再早一点是科学的数据,不管哪种数据都是和网络关联的,个人自媒体出来以后网络数据又非常多。
但这些数据以前大家都把它叫做大数据,最近有一个讲法,大数据不是规模大,而是垃圾多的数据叫大数据,利用率低的数据。
比如视频数据,另外网络的个人数据,真正被利用的比例还是很低的,大数据本身的概念越来越大,但这个数据大了以后到底怎么使用怎么发展,最近一段时间大家都深入讨论,比如说数据是不是越大越好,是不是什么东西都一定要一个数据?回答是No。
最近有一个非常好的案例,AlphaGo 下围棋,以前是需要使用人类下围棋的数据,同时自己尝试了三千万局的数据,最近的AlphaGo Zero不需要人类对弈数据了,自己会生产数据。
现在我们就可以提问,什么样的情况不需要外部数据,自己生产数据就够了?我和有些专家讨论,觉得什么样的AI系统不需要外部数据就可以战胜人,实际上就是满足三个条件:1.集合是封闭的,不管你是状态集还是什么集,你的集合是封闭的,我们知道围棋集合是封闭的。
2.规则是完备的。
也就是说下棋什么地方能下,什么地方不能下,这个规则完全完备的,不能随便更改。
3.约束是有限的,也就是说你在约束条件下,不可以递规,因为有了递规之后往下推延就停不下来,而有限的时候就能停下来。
满足这三个条件,不需要外部数据,系统自己产生数据就够了。
所以可以想见,今后有很多的情况你去判断这个人和机器最后谁能赢,满足这三个条件机器一定赢,不管德扑、围棋,类似的情况很多了。
是不是所有的情况都是这样?当然不是。
DNS域名解析系统稳定性和安全性提升方案第一章 DNS域名解析概述 (2)1.1 DNS基本概念 (2)1.2 DNS工作原理 (2)第二章 DNS域名解析系统稳定性分析 (3)2.1 系统稳定性评估指标 (3)2.2 影响稳定性的主要因素 (4)2.3 稳定性提升策略 (4)第三章 DNS域名解析系统安全性分析 (5)3.1 安全性问题类型 (5)3.2 影响安全性的主要因素 (5)3.3 安全性提升策略 (5)第四章 DNS域名解析系统架构优化 (6)4.1 架构设计原则 (6)4.2 架构优化方案 (6)4.3 系统冗余设计 (7)第五章 DNS域名解析缓存优化 (7)5.1 缓存策略分析 (7)5.2 缓存优化方法 (8)5.3 缓存安全性保障 (8)第六章 DNS域名解析负载均衡策略 (9)6.1 负载均衡技术概述 (9)6.2 负载均衡策略设计 (9)6.2.1 基于DNS轮询的负载均衡策略 (9)6.2.2 基于DNS地理信息负载均衡策略 (9)6.2.3 基于DNS健康检查的负载均衡策略 (9)6.3 系统功能提升 (10)第七章 DNS域名解析监控与报警系统 (10)7.1 监控系统设计 (10)7.1.1 监控目标与需求分析 (10)7.1.2 监控系统架构 (10)7.1.3 监控策略 (11)7.2 报警系统设计 (11)7.2.1 报警条件与级别 (11)7.2.2 报警方式 (11)7.2.3 报警处理流程 (11)7.3 故障排查与处理 (11)7.3.1 故障排查方法 (11)7.3.2 故障处理策略 (12)第八章 DNS域名解析系统防护措施 (12)8.1 防护技术概述 (12)8.2 防护措施实施 (12)8.3 防护效果评估 (13)第九章 DNS域名解析系统合规性保障 (13)9.1 法律法规要求 (13)9.2 合规性评估与审查 (14)9.3 合规性保障措施 (14)第十章 DNS域名解析系统持续改进 (14)10.1 改进策略制定 (14)10.1.1 目标设定 (14)10.1.2 策略制定 (15)10.2 改进方案实施 (15)10.2.1 系统架构优化 (15)10.2.2 安全防护措施 (15)10.2.3 功能优化 (15)10.2.4 监控与报警系统 (15)10.3 改进效果评估与优化 (15)10.3.1 评估指标 (16)10.3.2 优化方案 (16)第一章 DNS域名解析概述1.1 DNS基本概念DNS(Domain Name System,域名系统)是一种用于将易于记忆的域名转换为计算机能够理解的IP地址的分布式数据库系统。
宽带网络中的DNS设置和优化方法宽带网络已成为我们日常生活中必不可少的一部分,然而在享受高速网络的同时,我们也常常面临着网络访问速度慢、网页打开缓慢等问题。
其中,DNS(Domain Name System)的设置和优化是影响网络访问速度的重要因素之一。
本文将介绍宽带网络中的DNS设置和优化方法,帮助读者提升网络访问的效率。
一、DNS的基本概念和原理DNS是一个分布式的数据库系统,它将域名与IP地址进行映射,实现人类可识别的域名到机器可识别的IP地址之间的转换。
当我们在浏览器中输入一个域名时,电脑会向DNS服务器发送查询请求,获取该域名对应的IP地址,然后通过IP地址访问对应的网站。
在DNS设置和优化前,我们需要了解以下几个重要的DNS概念:1. DNS解析:将域名转换为IP地址的过程。
包括递归查询和迭代查询两种方式。
2. DNS缓存:DNS服务器和客户端都会进行DNS缓存,以提高域名解析的速度和效率。
3. 默认DNS服务器:由于宽带网络供应商会为用户提供默认的DNS服务器,一般情况下我们可以使用默认DNS服务器进行网络访问。
二、DNS设置和优化方法1. 更换DNS服务器默认DNS服务器往往并不是最优的选择,我们可以通过更换DNS 服务器来提升网络访问速度。
以下是一些常见且可靠的公共DNS服务器:- 谷歌公共DNS:8.8.8.8、8.8.4.4- OpenDNS:208.67.222.222、208.67.220.220- 阿里DNS:223.5.5.5、223.6.6.62. 清空DNS缓存DNS缓存在一定程度上提高了访问速度,但有时会导致访问出现问题。
我们可以通过以下步骤清空DNS缓存:在Windows系统中,按下Win+R组合键打开运行对话框,输入cmd并回车,然后输入ipconfig /flushdns并回车即可清空DNS缓存。
在Mac系统中,打开终端,输入sudo killall -HUP mDNSResponder并回车。
网络优化中的DNS解析优化方法DNS(Domain Name System)解析是指将域名转换为对应的IP地址的过程。
在网络优化中,DNS解析是一个重要的环节,优化DNS解析可以提高网站的访问速度和用户体验。
本文将介绍几种网络优化中的DNS解析优化方法。
一、使用高性能、可靠的DNS服务提供商选择一家高性能、可靠的DNS服务提供商是DNS解析优化的第一步。
优秀的DNS服务商能够提供高速、稳定的解析服务,减少解析的延迟时间。
常见的全球性DNS服务商包括Google Public DNS、OpenDNS和Cloudflare等,它们都具有强大的解析能力和全球部署的服务器,能够高效地解析域名。
二、合理设置DNS解析的TTL时间TTL(Time to Live)是指DNS解析结果在缓存中的存活时间。
设置TTL的目的是为了减少DNS解析的次数,提高解析效率。
一般情况下,将TTL设置为较短的时间可以快速更新DNS解析结果,但同时也会增加DNS服务器的负载。
因此,在设置TTL时间时,需要根据实际情况综合考虑,权衡解析速度和DNS服务器负载。
三、使用CDN加速CDN(Content Delivery Network)是通过将网站的内容分发到全球各地的服务器上,将用户的请求指向离用户最近的服务器,从而提高网站的访问速度。
CDN服务商通常会提供自己的DNS解析服务,优化DNS解析过程。
通过使用CDN加速,可以将用户的请求快速转发到最佳的服务器,减少解析时间。
四、实施智能DNS解析智能DNS解析是根据用户的地理位置和网络状况,动态选择最佳的IP地址进行解析的一种方法。
智能DNS服务商通常会在全球各地部署多个服务器,并根据实时的网络情况和负载情况选择最佳的服务器进行解析。
通过智能DNS解析,可以提高解析的准确性和速度,使用户能够更快地访问网站。
五、减少DNS解析次数减少DNS解析次数是提高解析速度的有效方式之一。
在设计网站时,可以尽量减少页面中引用的外部资源的数量,避免对不同的域名进行大量的解析请求。
技术分享 HTTPS环境DNS优化_光环大数据培训DNS 服务作用于网络连接之前,将域名解析为 IP 地址供后续流程进行连接。
DNS 查询时,会先在本地缓存中尝试查找,如果不存在或是记录过期,就继续向DNS 服务器发起递归查询,这里的 DNS 服务器一般就是运营商的 DNS ...网络 Java Hadoop 服务器 AndroidDNS 服务作用于网络连接之前,将域名解析为 IP 地址供后续流程进行连接。
DNS 查询时,会先在本地缓存中尝试查找,如果不存在或是记录过期,就继续向 DNS 服务器发起递归查询,这里的 DNS 服务器一般就是运营商的 DNS 服务器。
在这过程中,会产生一些不可控的问题。
美图的移动端产品在实际用户环境下会面临 DNS 劫持、耗时波动等问题,这些 DNS 环节的不稳定因素,导致后续网络请求被劫持或是直接失败, 对产品的用户体验产生不好的影响。
为此,我们对移动端产品的 DNS 解析进行了优化探索,产生了相应的 SDK。
在这过程中,我们参考借鉴了业内的主流方案,也进行了一些实践上的思考。
下面的内容会主要以 Android 平台来进行说明。
LocalDNS VS HTTP DNS在长期的实践中,互联网公司发现 LocalDNS 会存在如下几个问题:域名缓存: 运营商 DNS 缓存域名解析结果,将用户导向网内缓存服务器;解析转发 & 出口 NAT: 运营商 DNS 转发查询请求或是出口 NAT 导致流量调度策略失效;为了解决 LocalDNS 的这些问题,业内也催生了 HTTP DNS 的概念,它的基本原理如下:原本用户进行 DNS 解析是向运营商的 DNS 服务器发起 UDP 报文进行查询,而在 HTTP DNS 下,我们修改为用户带上待查询的域名和本机 IP 地址直接向HTTP WEB 服务器发起 HTTP 请求,这个 HTTP WEB 将返回域名解析后的 IP 地址。
比如 DNSPod 的实现原理如下:相比 LocalDNS, HTTP DNS 会具备如下优势: 根治域名解析异常: 绕过运营商的 DNS,向具备 DNS 解析功能的 HTTP WEB 服务器发起查询;调度精准: HTTP DNS 能够直接获取到用户的 IP 地址,从而实现准确导流; 扩展性强: 本身基于 HTTP 协议,可以实现更强大的功能扩展;那么,是否直接全部走 HTTP DNS 呢?美图移动端 DNS 优化策略探索HTTP DNS 相比 LocalDNS 存在一些优势, 然而 HTTP DNS 本身也是存在一定的成本问题。
美图的产品线丰富,涉及的域名也较为广泛,为了适应各产品的实际场景,在实践中我们设计了较为灵活的策略控制。
首先,在策略上我们并未完全放弃 LocalDNS。
一个 App 涉及的域名众多,在策略上我们能够配置其核心 API 域名走HTTP DNS,而对于非核心请求我们仍希望它先尝试走 LocalDNS, 在异常情况下才升级走 HTTP DNS。
那么如何判断 LocalDNS 的异常情况呢? 我们选择了几个指标来衡量一个DNS 服务器的质量情况:IP 记录的 TTL 时间: 在 DNS 劫持发生的情况下,返回的 TTL 可能会有非常大的值;解析耗时: 如果一个 DNS 服务器解析耗时不理想,那么它也不是我们希望的; 返回的 IP 的可连接性: 对返回的 IP 进行质量测试,如果连接状况不佳,那么这个 DNS 服务器有劫持的可疑;在 Android 平台上,通过系统方法获得的解析结果信息是非常有限的,上面的指标有的将无法获取,因此在实践中我们会自己去构造 DNS 查询报文,向运营商的多个 DNS 服务器发起查询。
通过上面几个指标的综合评定,当 LocalDNS 表现不佳的时候,策略上我们将升级走 HTTP DNS,尝试让用户获取更好的 DNS 解析效果。
在 DNS 解析环节,还有一个我们比较关心的指标,那就是 DNS 解析的耗时:LocalDNS 在过期的情况下,会发起递归查询,这个时间是不可控的,在部分情况下甚至能达到数秒级别; HTTP DNS 相对会好一些,但正常来看,也会有200ms 左右的耗时。
这个时间能否再优化一些呢?我们 SDK 在本地构建了自己的记录缓存池,每次通过 LocalDNS 或是 HTTP DNS 解析得到记录都存在缓冲池中。
当然,这个是普遍的做法,系统底层的 netdb 库也是这样实现。
区别在于我们做了一个小改动:对于过期的记录我们采用懒更新的策略,当查到过期的缓存记录时,先返回过期记录给用户,同时再异步重新发起 DNS 查询更新缓存记录。
这个小改动能够保证我们二次解析时都能命中本地缓存,极大地降低 DNS 解析耗时,不过它也带来了一定的风险性。
因此实践中,我们也会添加异步定期的 DNS 记录缓存池扫描功能,及时发现缓存中的过期记录并进行更新,也降低 App 命中过期记录的情况。
无侵入的 SDK 接入方式探索在 DNS 优化的实践中,我们遇到较大的问题,倒不是策略层面设计问题,而是我们的 DNS SDK 运用到实际 App 产品业务上的姿势问题。
业内对 HTTP DNS 在实际业务中的接入方式多采用 IP 直连的形式,即原本直接请求 ,现在我们先调用 SDK 进行域名解析,拿到 IP 地址比如 1.1.1.1,然后替换域名为: http://1.1.1.1/;这样操作之后,由于 URL 中 HOST 已经是 IP 地址,网络请求库将跳过域名解析环节,直接向 1.1.1.1 服务器发起 HTTP 请求。
在实际操作中,对于 IP 直连的方案我们踩了不少的坑。
首先,对于 HTTP 请求,采用 IP 直连的方案后,我们还是需要进行的一个操作是手动配置 Header 中的 HOST :URL htmlUrl = new URL("http://1.1.1.1/");HttpURLConnection connection = (HttpURLConnection) htmlUrl.openConnection();connection.setRequestProperty("Host","www.me ");HTTP 协议相对比较容易,只需要处理 HOST,那么 HTTPS 呢?发起HTTPS请求首先需要进行 SSL/TLS 握手,其流程如下: 客户端发送Client Hello,携带随机数、支持的加密算法等信息; 服务端收到请求后,选择合适的加密算法,连同公钥证书、随机数等信息返回给客户端;客户端检验服务端证书的合法性,计算产生随机数并用证书公钥加密发送给服务端; 服务端通过私钥获取随机数信息,基于之前的交互信息计算得到协商密钥并通知给客户端;客户端验证服务端发送的数据和密钥,通过后双方握手完成,开始进行加密通信;在我们采用 IP 直连的形式后,上述 HTTPS 的第三步会发生问题, 客户端检验服务端下发的证书这动作包含两个步骤:客户端用本地保存的根证书解开证书链,确认服务端的证书是由可信任的机构颁发的。
客户端需要检查证书的 Domain 域和扩展域是否包含本次请求的HOST。
证书的验证需要这两个步骤都检验通过才能够进行后续流程,否则 SSL/TLS 握手将在这里失败结束。
由于在 IP 直连下,我们给网络请求库的 URL 中 host 部分已经被替换成了 IP 地址,因此证书验证的第二步中,默认配置下“本次请求的 HOST”会是一个 IP 地址,这将导致 domain 检查不匹配,最终 SSL/TLS 握手失败。
那么该如何解决这个问题?解决 SSL/TLS 握手中域名校验问题的方法在于我们重新配置 HostnameVerifier, 让请求库用实际的域名去做域名校验,代码示例如下: final URL htmlUrl = new URL("https://1.1.1.1/");HttpsURLConnection connection = (HttpsURLConnection)htmlUrl.openConnection();connection.setRequestProperty("Host","www.me ");connection.setHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return HttpsURLConnection.getDefaultHostnameVerifier() .verify("",session); }});我们又解决了一个问题,那么 IP 直连下, HTTPS 的问题都搞定了吗?没有,HTTPS 还有 SNI 的场景要特殊处理。
SNI(Server Name Indication)是为了解决一个服务器使用多个域名和证书的SSL/TLS扩展。
它的基本工作原理如下:服务端配置有多个域名和对应的证书。
客户端在与服务器建立SSL链接之时,先发送自己要访问站点的域名。
服务器根据这个域名返回一个合适的证书。
跟上面 Domain 校验的情况类似,这里的网络请求库默认发送给服务端的 "要访问站点的域名" 就是我们替换后的 IP 地址。
服务端在收到这样一个 IP 地址形式的域名后将是一脸懵逼,找不到对应的证书,最后只好下发一个默认的域名证书回来。
接下来发生的是,客户端在检验证书的 Domain 域时,怎么也检查不通过,因为服务端下发的证书本来就不是对应该域名的。
最后 SSL/TLS 握手失败告终。
上述这个 SNI 场景下的问题,我们是否有办法解决呢?可以解决,需用客户端重新定制 SSLSocketFactory , 不过修改的代码相对较多,这里就不列举了。
如果我们 SDK 要接入到 App 实际业务中,到 HTTPS SNI 场景处理这里,相信很多同学都崩溃了,接入的工作量其实也不低。
很多情况下可能就做了妥协,只有 Okhttp 场景才使用这个 SDK,因为 Okhttp 本身支持 DNS 替换,没有上面那些问题。
在美图的实践中,我们不仅仅希望 Okhttp 的请求才进行这个 DNS 优化,我们希望在 App H5 页面加载、播放器播放等场景也能应用相应的优化。
在这样的需求下,IP 直连的接入方案带来的接入工作量其实不低,甚至需要改动到部分轮子。