url输入到返回请求的过程

2021-03-16  本文已影响0人  AmazRan

起因

看了一篇文章《阿里面试官的”说一下从url输入到返回请求的过程“问的难度就是不一样!》
打算好好补一下这方面的细节和计算机网络的知识


从进程的角度看问题

浏览器进程:

用户输入内容,进行URL 解析(编码)

网络进程:
  1. 查询缓存(缓存相关知识)
  1. DNS 解析(DNS 相关)
  1. 拿到 IP 地址发起 HTTP 请求(这块可以问网络相关各种基础知识,TCP、IP、UDP、HTTPS、HTTP2)
  1. 拿到 HTTP 响应(HTTP 响应码)
  2. 根据 Content-Type 来判断响应文件类型(常用 HTTP 响应头的作用)
    • stream 类,浏览器启动下载界面下载文件。
    • text、图片类,浏览器直接展示在页面上
    • html 类型,浏览器会进行页面解析。
渲染进程:
  1. 页面解析
  2. 网络进程向渲染进程传输 HTML 数据
  3. 对 HTML 进行词法分析,通过堆栈算法构建 DOM 树。(AST语法树)
  4. 如果遇到外部资源,浏览器会交给网络进程去下载。
  5. 构建完 DOM 树的同时,将 CSS 代码转为浏览器可以理解的 StyleSheets
    • 标准化样式属性值(单位、大小)
    • 计算出 DOM 树每个节点的具体样式
    • 计算每个 DOM 节点的父节点们的样式(样式继承)
  6. DOM 树构建完成后,合并 StyleSheets 构建出 CSSOM 渲染树。
  7. 排版:遍历渲染树,计算元素的坐标位置。
  8. 分层:为节点生成图层
  9. 绘制:用浏览器指令逐条绘制页面元素。(如何避免重绘重排)
  10. 栅格化
  11. 合成

文章评论区有人总结的点,我觉得比较清晰了


要点

  1. 为什么要进行URL解析?
    网络标准规定了URL只能是数字和字母还有一些特殊符号,如果不转义会出现歧义。

  2. url编码的规则是什么?
    URL编码又称百分号编码,交给浏览器自己决定。使用Javascript先对URL编码,然后再向服务器提交,不要给浏览器插手的机会。因为Javascript的输出总是一致的,所以就保证了服务器得到的数据是格式统一的。(参考阮老师的《关于URL编码》

  3. dns的解析流程(浅析DNS域名解析过程
    第一步:检查浏览器缓存中是否缓存过该域名对应的IP地址
    第二步:如果在浏览器缓存中没有找到IP,那么将继续查找本机系统是否缓存过IP
    第三步:向本地域名解析服务系统发起域名解析的请求(校园网、移动、电信或联通运营商)大部分的解析工作到这里就差不多已经结束了,负责了大部分的解析工作。
    第四步:向根域名解析服务器发起域名解析请求
    第五步:根域名服务器返回gTLD域名解析服务器地址(Generic top-level domain通用顶级域)gTLD是国际顶级域名服务器,如.com、.cn、.org等,全球只有13台左右
    第六步:向gTLD服务器发起解析请求
    第七步:gTLD服务器接收请求并返回Name Server服务器(找到对应的域名服务器将承担域名解析的任务,例如用户在某个域名服务提供商申请的域名)
    第八步:Name Server服务器返回IP地址给本地服务器
    第九步:本地域名服务器缓存解析结果
    第十步:返回解析结果给用户

  4. 如何做html的dns优化?

<link rel="dns-prefetch" href="http://www.spreadfirefox.com/">
// a标签默认启动在https无效需要设置开启
<meta http-equiv="x-dns-prefetch-control" content="on">

DNS Prefetch 是一种DNS 预解析技术,当你浏览网页时,浏览器会在加载网页时对网页中的域名进行解析缓存,这样在你单击当前网页中的连接时就无需进行DNS的解析,减少用户等待时间,提高用户体验。

  1. 从网卡把数据包传输出去到服务器发生了什么?(OSI参考模型Open System Interconnection Model)(OSI参考模型解析
    问题本质就是搞懂OSI参考模型的职能:

参考:探究!一个数据包在网络中的心路历程
  1. 关于缓存

from memory cache和from disk cache分别指从内存和硬盘读取缓存,浏览器会优先去内存里读取缓存。隐私模式、base64图片等通常从内存读取,特征快、时效性。

  1. 解析html
    cssom + doomTree = html,然后布局和绘制
  1. 页面渲染优化

心得

确实是比较全面的一道题了,典型的从点到面。牵扯到网络请求、缓存、渲染等等问题,甚至可以聊tcp的三次握手,水太深了。

P.S.懒狗本质太久没整理了,忙碌起来还是要抽个时间沉淀一下,后面可能想到啥写啥吧。


上一篇 下一篇

猜你喜欢

热点阅读