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

  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. Android 开源库 GitHub 托管

    本文微信公众号「AndroidTraveler」首发. 背景 之前给大家写过一篇文章 Android 上传开源项目到 jcenter 实战踩坑之路,分享了上传开源项目到 jcenter 上面的一些踩坑 ...

  2. 手机信号G、E、O、3G代表什么意思?

    G指GPRS,是2.5G网络,属于GSM网络,也就是说这项技术位于第二代(2G)和第三代(3G)移动通讯技术之间,GPRS的传输速率可提升至56甚至114Kbps,已经将2017年确定为关闭GSM网络 ...

  3. Mybatis精讲(一)---环境配置及架构梳理

    目录 简介 ORM模型 Hibernate Ibatis 环境搭建 jar 配置 xml方式配置 代码方式配置 两种方式对比 Mybatis结构 源码解读xml环境加载 映射器解读 Ibatis # ...

  4. 开源 ERP 系统 GoodERP

    如果你有一个苹果,我也有一个苹果,彼此交换后,你我还是一人一个苹果,但是如果你有一个想法,我有一个想法,彼此交换后,你我就都有两个想法,三个人呢?一百个人呢? 使用openobject框架 重写全部功 ...

  5. sql性能分析(explain关键字)

    explain关键字结果 列名所代表的的含义: Id:MySQL QueryOptimizer 选定的执行计划中查询的序列号.表示查询中执行 select 子句或操作表的顺序,id 值越大优先级越高, ...

  6. [WPF] Caliburn Micro学习一 Installation

    在之前的文章(http://blog.csdn.net/alvachien/article/details/5670838)里面,已经提到过MVC和MVVM在Design Pattern上的比较. 首 ...

  7. nyoj 484-The Famous Clock

    484-The Famous Clock 内存限制:64MB 时间限制:1000ms 特判: No 通过数:2 提交数:2 难度:1 题目描述: Mr. B, Mr. G and Mr. M are ...

  8. 有趣的css3实战案例剖析——(水纹波动)

    对于css3的学习,更多的是在于对新特性和基础理论的熟悉, 这篇文章通过一个案例带领大家了解css3里一些理论知识,也将一些技巧加以总结,从而提高大家的开发效率: 本次案例为(水纹波动),不用js写动 ...

  9. 正则表达式 第五篇:C# 正则元字符

    本文整理C#正则表达式的元字符,正则表达式是由字符构成的表达式,每个字符代表一个规则,表达式中的字符分为两种类型:普通字符和元字符.普通字符是指字面含义不变的字符,按照完全匹配的方式匹配文本,而元字符 ...

  10. 领扣(LeetCode)寻找旋转排序数组中的最小值 个人题解

    假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出其中最小的元素. 你可以假设数组中不存在重 ...