从输入网址看到网页发生了什么
2023-09-19 18:43:29 0 举报
AI智能生成
前端面试问题
作者其他创作
大纲/内容
判断是否网址
根据一些特有的算法和规则判断输入内容是否为一个网址
什么算法?
我理解无非是通过输入的字符串去进行正则匹配。
1. 带有http, https等协议完整的链接
2. 第一个/前为域名,域名中带有关键字的。比如baidu, csdn等等
我理解无非是通过输入的字符串去进行正则匹配。
1. 带有http, https等协议完整的链接
2. 第一个/前为域名,域名中带有关键字的。比如baidu, csdn等等
如果不是网址,则打开默认的搜索引擎对输入内容进行搜索
如果是网址,会先执行beforeunload事件,卸载当前页面,再执行后续操作
DNS解析
浏览器缓存
比如chrome缓存1000条dns解析结果, 可在ttl中查看缓存大小,时间等
系统缓存
本地硬盘的hosts文件
本地DNS服务器缓存
MAC网络设置中查看
路由器缓存
服务提供商缓存(比如阿里云)
根据本地dns服务器的设置,如果设置了转发模式,则转发到对应的上级服务器,再依次循环查找,直到查找到或者转发到根域名服务器
如果没有设置转发模式,则发送到13台根域名服务器,根域名服务器会返回对应的顶级域名服务器ip(比如.com, .cn),本地服务器收到后再发至对应的顶级域名服务器,比如www.baidu.com, 先到.com服务器,再到.baidu.com服务器,一层一层查找直至查找到准确ip,再返回给客户端
发送请求
获取到ip后,发送请求到对应ip,(对方可能会有nginx负载均衡等)发至对应的服务器
建立网络连接
HTTP连接
三次握手
客户端发送SYN到服务端 (客:我给你发了个信息,你收到没)
服务端收到SYN,并生成ACK,发送给客户端 (服:收到,我给你回了个信息,你收到没)
客户端接收到服务端的SYN和ACK,标志连接成功 (客:收到啦,成功)
HTTPS连接
tls/ssl加密(新版本都是用tls)
客户端发送报文给服务端,报文中包含当前支持的ssl/tls版本
服务端找到合适的加密协议,返回证书以及公钥
客户端使用根证书验证证书合法性。如验证成功,生成对称密钥,通过非对称密钥加密对称密钥,发送给服务端
服务端收到后,使用非对称私钥解密,获取对称密钥,并用对称密钥加密相关报文,再返回给客户端
客户端解密数据,建立SSL连接
读取服务器返回的数据和状态码
返回200
成功返回,开始读取Content-type字段,判断文件MIME类型
并根据MIME构建其他请求进行渲染
返回301或者302
读取http的location字段,执行重定向,并执行beforeunload之后的过程
301和302的区别: 301是旧的资源被永久删除了,302是旧的资源依然存在,只是临时重定向
返回404
资源不存在
返回403
没有权限
返回401
未授权: (Unauthorized)
返回5**
服务端错误
断开网络连接
HTTP连接
四次挥手
客户端发送FIN=1到服务端
服务端接收之后,发送ACK到客户端,进入等待关闭状态(此时依旧可以发送数据)
服务端发送FIN=1到客户端,表示已经发送完成
客户端收到内容,断开连接
HTTPS连接
客户端断开连接,发送close_notify
页面渲染(一般接收到的内容都是一个html文件)
第一步构建dom树
第二步是处理CSS并构建CSSOM树
第三步是将DOM和CSSOM组合成一个Render树,计算样式树或渲染树从DOM树的根开始构建,遍历每个可见节点
第四步是在渲染树上运行布局以计算每个节点的几何体
最后一步是将各个节点绘制到屏幕上,第一次出现的节点称为first meaningful paint
收藏
收藏
0 条评论
下一页