域名发散

概述

即同一应用下,采取多个域名请求静态资源,比如 css,使用 css.yourDomain.com,js 采用 js.yourDomain.com,将静态资源切分多个域名去请求。

优点

  • 突破浏览器对同一域名的并发请求限制,以提升加载速度

image-20230904162824894

  • 如果你使用 cdn,或者多个服务去代理不同的静态资源,可以降低高并发带来的负荷,提升服务器稳定性

缺点

  • 虽然突破同一域名的并发请求限制,但是也加多了解析的开销和时间。需权衡业务和网络环境,移动端更适合域名收敛(因为移动端网络环境变化大,3g,4g 等)
  • SSL 证书成本和管理大

应用场景

适用于 Web 端对首页加载速度要求高 (web 端一般网速稳定、快)

域名收敛

域名收敛就是将静态资源放在一个域名下不进行发散,这主要是为了适应移动端的发展需求;通常 DNS 是一个开销较大的操作,而移动端由于网络带宽和实时性、资源等的限制,这些开销对移动端的用户体验是致命的。

优点

降低 dns 查找消耗

应用场景

适用于客户端的 h5 应用

http-dns

传统域名解析(LocalDNS)

DNS 解析详细过程:

用户输入网址如http://www.baidu.com 回车–>游览器解析网址,获取域名,解析域名。

① 先是向游览器中找是否有此域名的缓存,如果有则解析结束,没有则继续查找操作系统缓存中是否有这个域名对应的 dns 结果。

② 如果以上两则都未能命中,则游览器会向系统网络配置中已经配好的 LocalDNS 发送解析请求,请求中携带着要解析的域名

这个 dns 称为本地区的域名服务器(LocalDNS),通常离我们本地电脑不会太远。

③ 如果这个 LocalDNS 还是未能命中,就直接到 Root Server(根域名服务器)请求解析,根域名解析器会返回给 LocalDNS 服务器一个所查寻域的顶级域名服务器(gTLD Server)地址。gTLD 是国际顶级域名服务器,包含.com、.cn、.org 等后缀域名解析,所有提供域名注册的注册商必须在此 DNS 服务器中注册。

④ LocalDNS 拿到这个 gTLD 的地址后,再带着要解析的域名向 gTLD 发起解析请求。gTLD 服务器查找并返回此域名对应的 Name Server 域名服务器(或者叫二级域名服务器)的地址,这个 Name Server 通常就是你注册的域名服务器。

⑤ LocalDNS 又再次获得 Name Server 地址,再次请求,这时 Name Server 会查询所有存储的域名与 IP 映射的关系表单,结果连同 IP 和一个 TTL 值返回给 LocalDNS 域名服务器。LocalDNS 拿到 IP 和 TTL,先根据 TTL 值缓存此 IP,最后将 IP 和 TTL 返回给用户系统。系统根据 TTL 值缓存在本地缓存中。

http-dns

HTTPDNS 是使用 HTTP 协议向 DNS 服务器的进行请求,代替传统的 DNS 协议使用 UDP 协议向 DNS 服务器的进行请求,绕开了运营商的 Local DNS,简化了请求的复杂性,避免了使用运营商 Local DNS 造成的劫持和跨网问题。

本地 host 文件相似,但本地 host 是不联网,http-dns 是联网服务

HTTP DNS,通常需要先请求 HTTP DNS 服务获取真实的 IP 地址,然后再使用这个 IP 地址去请求需要的资源。

简单的使用 HTTP DNS 的示例:

<script>
//设置httpdns解析的地址
var httpdns_url = "http://203.107.1.1/d?host=";

//需要解析的域名
var domain = "example.com";

//使用XHR进行请求
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
//获取解析的结果,即需要请求的实际IP地址
var ip = xhr.responseText;
console.log("IP Address: " + ip);

//然后可以使用这个IP地址去请求实际需要的资源
//因为跨域的问题,这里只是简单的示例,并不能真实运行
var resource_url = "http://" + ip + "/path/to/resource";
var resource_xhr = new XMLHttpRequest();
resource_xhr.open("GET", resource_url, true);
resource_xhr.send();
}
};
xhr.open("GET", httpdns_url + domain, true);
xhr.send();
</script>

跨域、协议等问题

通过设置 http 的host属性解决

使用场景

1、对首屏时延要求比较高的 APP 或者网页;

2、希望降低访问延迟、减少跨网访问的资讯、游戏类 APP;

3、希望降低连接失败率,提升业务成功率的通用 APP;

4、域名屡次被劫持,希望用户访问顺畅无阻的 APP;

来源

HTTPDNS 详解 - 知乎 (zhihu.com)