输入网址回车或者刷新页面到页面传染出来的整个流程

  1. DNS 解析
  2. HTTP三次握手 -> TCP/IP连接
  3. 浏览器发送请求
  4. 服务器返回请求的文件 (html)
  5. 浏览器渲染

1. DNS 解析

  1. 查找缓存

    • Chrome搜索自身的DNS缓存,看有没有该域名对应的IP地址(chrome://net-internals/#dns)
    • Chrome会搜索操作系统自身的DNS缓存(浏览器没有找到缓存或者缓存已经失效)
    • 读取本地的HOST文件(操作系统的缓存没有找到)(mac: etc/host)
  2. 浏览器发起一个DNS的一个系统调用(向本地主控DNS服务器,一般由宽带运营商提供的,发起的一个域名解析请求)
    • 宽带运营商服务器查看本身缓存,有没有过期。
    • 运营商服务器代替浏览器发起一个迭代DNS解析的请求(baidu.com的IP地址是多少?1、寻找根域的DNS IP地址,2、COM域的顶级域的IP地址,3、baidu.com域的IP地址)(以123.com为例,COM 是根域名,123.com是人们经常提到的顶级域名,主域名可以理解为你的网站的访问域名,一般是www.123.com
    • 运营商服务器把结果返回操作系统内核同时缓存以来
    • 操作系统内核把结果返回浏览器
    • 最终浏览器拿到了www.imooc.com对应的IP地址

2. HTTP三次握手 -> TCP/IP连接

  1. 浏览器获得域名对应的IP地址后,发起HTTP“三次握手”

    • 浏览器会以一个随机端口,向服务器的web程序发起TCP连接请求
    • 应用层会下发数据给传输层,然后下发给网络层。网络层中的 IP 协议会确定 IP 地址,并且指示了数据传输中如何跳转路由器。然后包会再被封装到数据链路层的数据帧结构中,最后就是物理层面的传输
    • TCP链接请求通过层层的路由设备,到达服务器端以后,首先进入网卡,然后进入内核的TCP/IP协议栈,经过防火墙的过滤,最后到达服务端,建立起TCP/IP的连接
    • 数据在进入服务端之前,可能还会先经过负责负载均衡的服务器,它的作用就是将请求合理的分发到多台服务器上

3. 浏览器发送请求

  1. TCP/IP连接建立起来以后,浏览器就可以向服务器发送HTTP请求了使用了。(例如:用HTTP的GET方法请求一个根域里的一个协议,协议可以采用HTTP 1.0的一个协议)

    • 浏览器在每次发起请求时,都会现在浏览器缓存中查找该请求的结果以及标识
    • 如果没有请求的缓存结果和缓存标识,那么就会发起HTTP请求
    • 如果该请求的缓存结果失效,只有缓存标识,则携带该资源的缓存标识,发起HTTP请求,若协商缓存生效,则返回304
    • 如果存在请求的缓存结果,且未失效,则直接返回。(强制缓存可以在network中的size查看,代表该缓存存放的位置。from memory cache内存中的缓存[图片、js] ,from disk cache硬盘中的缓存[css])

4. 服务器返回请求的文件 (html)

  1. 服务器端接受到了这个请求,根据路径参数,经过后端的一些处理以后,把处理后的一个结果的数据返回给浏览器。

    • 服务器会将缓存规则放入HTTP响应报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是ExpiresCache-Control,控制协商缓存的字段分别是Last-Modified/if-Modified-SinceEtag/if-None-Match
    • 浏览器每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器中缓存中。

5. 浏览器渲染

  1. 浏览器拿到了服务器返回的HTML页面代码,在解析和渲染这个页面时候,里面的JS/CSS、图片静态资源,他们同样也是HTTP请求,都需要经过上面的步骤。
  2. 浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给了用户。
    • HTML parser:根据 HTML 构建 DOM 树。
    • CSS parser:根据 CSS 构建 CSSOM 树。
    • 如果遇到 script 标签的话,会判断是否存在 async 或者 defer ,前者会并行进行下载并执行 JS,后者会先下载文件,然后等待 HTML 解析完成后顺序执行。如果以上都没有,就会阻塞住渲染流程直到 JS 执行完毕。遇到文件下载的会去下载文件,这里如果使用 HTTP/2 协议的话会极大的提高多图的下载效率。
    • Attachment:CSSOM 树和 DOM 树构建完成后会开始生成 Render 树。
    • Layout: 布局。确定页面元素的布局、样式等等诸多方面的东西。
    • GPU painting: 像素绘制页面,将内容显示在屏幕上了。

输入URL到页面渲染的更多相关文章

  1. 一文摸透从输入URL到页面渲染的过程

    一文摸透从输入URL到页面渲染的过程 从输入URL到页面渲染需要Chrome浏览器的多个进程配合,所以我们先来谈谈现阶段Chrome浏览器的多进程架构. 一.Chrome架构 目前Chrome采用的是 ...

  2. 从浏览器输入URL到页面渲染的过程

    零.背景 一个web安全工程师在学习web安全和web渗透时候,非常有必要了解整个WEB工作过程. 一.输入URL 这里是最基本的知识:URL是URI的一种实际应用,URI统一资源表示符,URL统一资 ...

  3. 从输入URL到页面渲染完成 -戈多编程

    1.输入URL地址 2.浏览器根据域名查询IP地址 3.浏览器发送HTTP请求到web服务器 4.服务器返回一个永久重定向响应 5.浏览器会跟踪重定向地址 6.服务器处理请求 7.服务器返回一个HTM ...

  4. 从输入 URL 到页面加载完的过程中都发生了什么---优化

    这篇文章是转载自:安度博客,http://www.itbbu.com/1490.html 在很多地方看到,感觉不错,理清了自己之前的一些思路,特转过来留作记录. 一个HTTP请求的过程 为了简化我们先 ...

  5. 从输入 URL 到页面加载完成的过程中都发生了什么事情?

    这个问题是老生常谈的问题啦,虽然说到处百度都有的答案,还是希望自己能总结一下. 如今有很多答案,都是从硬件开始讲起,比如键盘的响应或者触屏的响应,然后CPU处理到OS的内核等等.这里不作为重点来讲,要 ...

  6. 【原】老生常谈-从输入url到页面展示到底发生了什么

    刚开始写这篇文章还是挺纠结的,因为网上搜索“从输入url到页面展示到底发生了什么”,你可以搜到一大堆的资料.而且面试这道题基本是必考题,二月份面试的时候,虽然知道这个过程发生了什么,不过当面试官一步步 ...

  7. 从输入url到页面加载完成发生了什么?——前端角度

    这是一道经典的面试题,这道面试题不光前端面试会问到,后端面试也会被问到.这道题没有一个标准的答案,它涉及很多的知识点,面试官会通过这道题了解你对哪一方面的知识比较擅长,然后继续追问看看你的掌握程度.当 ...

  8. 从输入 URL 到页面加载完成的过程中都发生了什么

    从输入 URL 到页面加载完成的过程中都发生了什么 过程描述 浏览器查找域名对应的 IP 地址: 浏览器根据 IP 地址与服务器建立 socket 连接: 浏览器与服务器通信: 浏览器请求,服务器处理 ...

  9. 一个页面从输入url到页面加载显示完成,中间都经历了什么

    第一种解释: 一般会经历以下几个过程: 1.首先,在浏览器地址栏中输入url 2.浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容.若没有,则跳到第三步操作. 3 ...

随机推荐

  1. Project Euler 57: Square root convergents

    五十七.平方根收敛(Square root convergents) 二的平方根可以表示为以下这个无穷连分数: \[ \sqrt 2 =1+ \frac 1 {2+ \frac 1 {2 +\frac ...

  2. day5-列表专区

    list 列表.类li = [1, 12, 9, "age", ["88", ["19", 10], "方法"], &q ...

  3. ES6学习笔记01 -- 暂时性死区 ( temporal dead zone )

    参考文档: let 和 const 命令 - ECMAScript6入门  暂时性死区(temporal dead zone) 理解ES6中的TDZ(暂时性死区) ES6 中 let 暂时性死区详解 ...

  4. nyoj 266-字符串逆序输出 (isdigit(), geline(cin, my_string))

    266-字符串逆序输出 内存限制:64MB 时间限制:3000ms 特判: No 通过数:15 提交数:18 难度:0 题目描述: 给定一行字符,逆序输出此行(空格.数字不输出) 输入描述: 第一行是 ...

  5. Linux注意事项

    一.学习 Linux 的注意事项 1. Linux 严格区分大小写 Linux 是严格区分大小写的,这一点和 Windows 不一样,所以操作时要注意区分大小写的不同,包括文件名和目录名.命令.命令选 ...

  6. VLAN实验(3)

    1.选择2台S3700和5台pc机,并根据实验编址完成此拓扑图. 2.启动设备,检查设备的连通性: 由于现在我们还没有划分VLAN,这5台PC,还在同一个VLAN中,现在我们启动所有的设备,这是所有的 ...

  7. Mint UI Example的运行

    Mint -UI是新推出的移动端UI框架 官网 不过官网上的文档例子不是很全面. 建议下载他们提供的example来学习. 1.examplle源码下载地址 2.打开项目,我这里使用webstorm, ...

  8. HTML的标签认识

    <!--      html标签     h1~h6 标题标签(只有1~6,依次减小)     p 段落标签     span 无意义的行标签     div 无意义的块标签     b 加粗 ...

  9. MAC终端中tree命令

    Mac没有自带的tree命令,需要额外安装才可以,操作方法有两种: 一.用find命令模拟tree效果 1.mac下默认是没有 tree命令的,不过我们可以使用find命令模拟出tree命令的效果,如 ...

  10. linux运维与实践

    1.容器云计算节点负载值高,通过top可以看到Load Average:70.1  71.3  70.8,虚拟机有8个cpu: cpu使用率高导致(R状态)? 同时在top中观察一段时间,消耗cpu最 ...