相似问题:
打开一个网址会发生什么?
浏览器是怎样工作的?
简述一次完整的 HTTP 请求过程
First Of All:在浏览器地址栏输入 URL 并回车
DNS 域名解析
- 搜索浏览器自身缓存的 DNS 记录
浏览器自身也带有一层 DNS 缓存。Chrome 缓存 1000 条 DNS 解析结果,缓存时间大概在一分钟左右。
(Chrome 浏览器通过输入:chrome://net-internals/#dns 打开 DNS 缓存页面)
- 搜索操作系统缓存和 hosts 文件
发生在浏览器缓存中没有找到需要的记录或记录已经过期的时候。
在 Windows 操作系统中,可以通过 `ipconfig /displaydns` 命令查看本机当前的缓存。
通过 hosts 文件,你可以手动指定一个域名和其对应的 IP 解析结果,并且该结果一旦被使用,同样会被缓存到操作系统缓存中。
Windows 系统的 hosts 文件在 `%systemroot%\system32\drivers\etc` 下,linux 系统的 hosts 文件在 `/etc/hosts` 下。
- 向域名解析服务器发送解析请求
发生在 hosts 文件和操作系统缓存中没有找到需要的记录或记录已经过期。
第一台被访问的域名解析服务器就是我们平时在设置中填写的 DNS 服务器一项。
一般一台域名解析服务器会被地理位置临近的大量用户使用(特别是 ISP 的 DNS),一般常见的网站域名解析都能在这里命中。
- 递归+迭代解析 DNS
发生在域名解析服务器也没有该域名的记录时。
从根域服务器(IPv4 只有 13 台)->
- 得到 IP 地址,返回给浏览器
浏览器缓存 -> 浏览器
host 文件/本地缓存 -> 浏览器
域名解析服务器 -> 浏览器
(xxx.xxx 域服务器 -> .xxx 域服务器 -> 根域服务器)
TCP 连接
发起 HTTP 请求
服务器处理请求
服务器响应请求
浏览器解析渲染
参考来源:
http://taligarsiel.com/Projects/howbrowserswork1.html
https://www.cnblogs.com/dengzz/p/5544122.html
https://juejin.im/post/5b148a2ce51d4506965908d2