前端网络面试:浏览器输入地址后发生了什么?
2023-12-29 20:08:45
理解整块的内容涉及到的 UDP、TCP 以及 http、https 相关知识
1. 请求前
- 浏览器自动补全协议、端口
- 浏览器自动完成
url
编码 - 浏览器根据
url
地址查找本地缓存,根据缓存规则看是否命中缓存- 若命中缓存则直接使用缓存,不再发出请求
- 未命中直接请求
- 通过
DNS
解析找到服务器的IP
地址 - 浏览器向服务器发出建立
TCP
连接的申请,完成三次握手,连接通道的建立 - 若使用了
Https
协议,则还会进行SSL
握手(认证),建立加密通道。使用SSL
握手时,会确定是否使用Http2
2. 请求过程
- 浏览器会决定要附带哪些
cookie
到请求头中 - 浏览器会自动设置好请求头、协议版本、
cookie
,并发送一个GET
请求 - 服务器处理后,进入后端处理流程。完成处理后,服务器响应一个
HTTP
报文给浏览器 - 浏览器根据使用的协议版本,以及
Connection
字段的约定,决定是否要保留TCP
连接 - 浏览器根据响应状态码决定如何处理这一次响应
- 浏览器根据响应头中的
Content-Type
字段识别响应类型,如果是text/html
,则对响应体的内容进行HTML
解析,否则做其他处理 - 浏览器根据响应头的其他内容完成缓存、
cookie
的设置
3. 请求后
- 浏览器开始从上到下解析 HTML,若遇到外部资源链接,则进一步请求资源
- 解析过程中
- 生成
DOM
树,CSSOM
树, - 然后一边生成一边把二者合并为渲染树(
rendering tree
), - 随后对渲染树种的每个节点计算位置和大小(
reflow
), - 最后把每个节点利用
GPU
绘制到屏幕(repaint
)
- 生成
- 在解析过程中还会出发一系列的事件,当
DOM
树完成渲染后会触发DOMContentLoaded
事件,当所有资源加载完毕后会触发load
事件
5. 补充 TCP vs UDP
TCP:面相连接确认 UDP:面相连接传输
- 连接
TCP
是面相连接的,UDP
是无连接的,即发送数据群不需要建立连接
- 服务
TCP
提供可靠的服务,通过 TCP 连接传送的数据,无差错,不丢失,不重复,且按序到达UDP
尽最大努力交付,即不保证可靠交付
- 数据
TCP
是面向字节流UDP
面相报文,并且网络出现阻塞不会使得发送速率降低(因此会出现丢包,对实时的应用比如IP
电话和视频会议等)
- 连接数
TCP
只能是 1 对 1 的UDP
支持 1 对 1,1 对多
- 大小
TCP
首部较大为 20 字节UDP
8 字节
6. http、https
http 是明文传输协议,https 协议是由 ssl + http 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。
https 原理
- 客户端拥有私钥 A,服务端拥有公钥 B(用于加密)和公钥 C(用于解密)
- 客户端向服务端发送请求,服务端会把公钥 B 传给客户端
- 客户端拿到公钥 B 后,用公钥 B 加密密钥 A,形成一段密文,然后把密文传给服务器
- 公钥 B 的密文,只有私钥 C 才能解密
- 服务端解密后,就得到了私钥 A
- 这时候客户端和服务端就可以通过密钥 A 来进行加密解密。
文章来源:https://blog.csdn.net/weixin_43794299/article/details/135296987
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!