面闭 —— HTTP

知识点

DNS

DNS 的作用就是通过域名查询具体的 IP。

面试题

Q:输入 URL 到页面的整个流程
A:

1、操作系统会首先在本地缓存中查询 IP

2、没有的话去系统配置的 DNS 服务器中查询

3、如果这时候还没得话,会直接去 DNS 根服务器查询,这一步查询会找出负责 com 这个一级域名的服务器

4、然后去该服务器查询 google 这个二级域名

5、接下来三级域名的查询其实是我们配置的,可以给 www 域名配置一个 ip ,然后给别的三级域名配置一个 IP

以上介绍的是 DNS 迭代查询,还有种是递归查询,区别就是前者是由客户端去做请求,后者是由系统配置的 DNS 服务器做请求,得到结果后将数据返回给客户端。

6、TCP 握手,应用层下发数据给传输层,TPC 协议 会指明两端的端口号,然后下发给网络层。网络层中的 IP 协定会确定 IP 地址,并且指示了数据传输中如何跳转路由器。然后包会再被封装到数据链路层的数据帧结构中,然后就是物理层面的传输了

在这一部分中,可以详细说下 TCP 的握手情况以及 TCP 的一些特性。

7、当 TCP 握手结束后就会进行 TLS 握手,然后就开始正式的传输数据。

在这一部分中,可以详细说下 TLS 的握手情况以及两种加密方式的内容。

8、数据在进入服务端之前,可能还会经过负责负载均衡的服务器,它的作用是将请求合理的分发到多台服务器上,这时假设服务器返回一个 html 文件。

9、首先浏览器会判断状态码,200继续解析,400、500报错,300重定向,这里会有个重定向计数器,避免过多次的重定向,超过次数也会报错。

10、如果是 gzip 格式会先解压一下,通过文件的编码格式去解析文件。

11、文件解析成功后开始渲染流程,会先根据 HTML 构造 DOM 树,有 CSS 的话会去构造 CSSOM 树。如果需要 script 标签的话,会判断是否存在 async 或者 defer,前者会并行进行下载并执行 js,后者会下载文件,然后等待 HTML 解析完后按顺序执行。

12、如果以上都没有,就会阻塞住渲染流程直到 js 执行完毕。遇到文件下载会去下载文件,这里如果使用 HTTP2 协议会极大提高多图的下载效率。

13、CSSOM 树 和 DOM 树构造完成后会开始生成 Render 树。在生成 Render 树的过程中,浏览器就开始调用 GPU 绘制,合成图层,将内容显示在浏览器上。

并且在下载文件时,也可以说下通过 HTTP2 协议可以解决队头阻塞的问题。


相关资料

前端面试之道

作者

Fallen-down

发布于

2021-06-28

更新于

2021-06-28

许可协议

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

评论

You forgot to set the shortname for Disqus. Please set it in _config.yml.
You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.