浏览器从输入URL回车,到页面展示,都经历了什么?

浏览器从输入URL回车,到页面展示,都经历了什么?

1,用户输入URL并回车

2,浏览器会根据用户输入的信息判断是搜索还是网址,如果是搜索内容,就将搜索内容+默认搜索引擎合成新的URL;如果用户输入的内容符合URL规则,浏览器就会根据URL协议,在这段内容上加上协议合成合法的URL;

3,浏览器进程通过进程间通信(IPC)把url请求发送给网络进程,GET /index.html HTTP1.1

4,网络进程接收到url请求后检查本地缓存是否缓存了该请求资源,如果有则将该资源返回给浏览器进程

5,如果没有,网络进程向web服务器发起http请求(网络请求),请求流程如下:

  • 5.1. 进行DNS解析,获取服务器ip地址,端口(如果没有端口号,http默认80,https默认443。如果是https请求,还需要建立TLS连接。)
  • 5.2 Chrome 有个机制,同一个域名同时最多只能建立 6 个TCP 连接,如果在同一个域名下同时有 10 个请求发生,那么其中 4 个请求会进入排队等待状态,直至进行中的请求完成。如果当前请求数量少于6个,会直接建立TCP连接。
  • 5.3 TCP三次握手建立连接,http请求加上TCP头部——包括源端口号、目的程序端口号和用于校验数据完整性的序号,向下传输
  • 5.4 网络层在数据包上加上IP头部——包括源IP地址和目的IP地址,继续向下传输到底层
  • 5.5 底层通过物理网络传输给目的服务器主机
  • 5.6 目的服务器主机网络层接收到数据包,解析出IP头部,识别出数据部分,将解开的数据包向上传输到传输层
  • 5.7 目的服务器主机传输层获取到数据包,解析出TCP头部,识别端口,将解开的数据包向上传输到应用层

6,网络进程解析响应流程;

  • 6.1 检查状态码,如果是301/302,则需要重定向,从Location自动中读取地址,重新进行第4步(301/302跳转也会读取本地缓存吗?这里有个疑问),如果是200,则继续处理请求。
  • 6.2 200响应处理:检查响应类型Content-Type,如果是字节流类型,则将该请求提交给下载管理器,该导航流程结束,不再进行后续的渲染,如果是html则通知浏览器进程准备渲染进程准备进行渲染。并且如果想要浏览器缓存数据的话,就在相应头中加入字段:Cache-Control:Max-age=2000
    数据传输完成,TCP四次挥手断开连接。如果,浏览器或者服务器在HTTP头部加上如下信息,TCP就一直保持连接。保持TCP连接可以省下下次需要建立连接的时间,提示资源加载速度Connection:Keep-Alive

7,网络进程将获取到的数据包进行解析,根据响应头中的Content-type来判断响应数据的类型,如果是字节流类型,就将该请求交给下载管理器,该导航流程结束,不再进行;如果是text/html类型,就通知浏览器进程获取到文档准备渲染

8, 准备渲染进程

  • 8.1 浏览器进程检查当前url是否和之前打开的渲染进程根域名是否相同,如果相同,则复用原来的进程,如果不同,则开启新的渲染进程

9, 传输数据、更新状态

  • 9.1 渲染进程准备好后,浏览器向渲染进程发起“提交文档”的消息,渲染进程接收到消息和网络进程建立传输数据的“管道”
  • 9.2 渲染进程接收完数据后,向浏览器发送“确认提交”
  • 9.3 浏览器进程接收到确认消息后更新浏览器界面状态:安全状态、地址栏url、前进后退的历史状态、更新web页面。

10, 渲染进程对文档进行页面解析和子资源加载,HTML 通过HTM 解析器转成DOM Tree(二叉树类似结构的东西),CSS按照CSS 规则和CSS解释器转成CSSOM TREE,两个tree结合,形成render tree(不包含HTML的具体元素和元素要画的具体位置),通过Layout可以计算出每个元素具体的宽高颜色位置,结合起来,开始绘制,最后显示在屏幕中新页面显示出来。

你可能感兴趣的:(http,chrome)