输入URL到页面渲染
输入网址回车或者刷新页面到页面传染出来的整个流程
- DNS 解析
- HTTP三次握手 -> TCP/IP连接
- 浏览器发送请求
- 服务器返回请求的文件 (html)
- 浏览器渲染
1. DNS 解析
- 查找缓存
- Chrome搜索自身的DNS缓存,看有没有该域名对应的IP地址
(chrome://net-internals/#dns) - Chrome会搜索操作系统自身的DNS缓存(浏览器没有找到缓存或者缓存已经失效)
- 读取本地的HOST文件(操作系统的缓存没有找到)(mac: etc/host)
- Chrome搜索自身的DNS缓存,看有没有该域名对应的IP地址
- 浏览器发起一个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连接
- 浏览器获得域名对应的IP地址后,发起HTTP“三次握手”
- 浏览器会以一个随机端口,向服务器的web程序发起TCP连接请求
- 应用层会下发数据给传输层,然后下发给网络层。网络层中的 IP 协议会确定 IP 地址,并且指示了数据传输中如何跳转路由器。然后包会再被封装到数据链路层的数据帧结构中,最后就是物理层面的传输
- TCP链接请求通过层层的路由设备,到达服务器端以后,首先进入网卡,然后进入内核的TCP/IP协议栈,经过防火墙的过滤,最后到达服务端,建立起TCP/IP的连接
- 数据在进入服务端之前,可能还会先经过负责负载均衡的服务器,它的作用就是将请求合理的分发到多台服务器上
3. 浏览器发送请求
- TCP/IP连接建立起来以后,浏览器就可以向服务器发送HTTP请求了使用了。(例如:用HTTP的GET方法请求一个根域里的一个协议,协议可以采用HTTP 1.0的一个协议)
- 浏览器在每次发起请求时,都会现在浏览器缓存中查找该请求的结果以及标识
- 如果没有请求的缓存结果和缓存标识,那么就会发起HTTP请求
- 如果该请求的缓存结果失效,只有缓存标识,则携带该资源的缓存标识,发起HTTP请求,若协商缓存生效,则返回304
- 如果存在请求的缓存结果,且未失效,则直接返回。(强制缓存可以在network中的size查看,代表该缓存存放的位置。
from memory cache内存中的缓存[图片、js] ,from disk cache硬盘中的缓存[css])
4. 服务器返回请求的文件 (html)
- 服务器端接受到了这个请求,根据路径参数,经过后端的一些处理以后,把处理后的一个结果的数据返回给浏览器。
- 服务器会将缓存规则放入HTTP响应报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是
Expires和Cache-Control,控制协商缓存的字段分别是Last-Modified/if-Modified-Since和Etag/if-None-Match - 浏览器每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器中缓存中。
- 服务器会将缓存规则放入HTTP响应报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是
5. 浏览器渲染
- 浏览器拿到了服务器返回的HTML页面代码,在解析和渲染这个页面时候,里面的JS/CSS、图片静态资源,他们同样也是HTTP请求,都需要经过上面的步骤。
- 浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给了用户。
- HTML parser:根据 HTML 构建 DOM 树。
- CSS parser:根据 CSS 构建 CSSOM 树。
- 如果遇到 script 标签的话,会判断是否存在 async 或者 defer ,前者会并行进行下载并执行 JS,后者会先下载文件,然后等待 HTML 解析完成后顺序执行。如果以上都没有,就会阻塞住渲染流程直到 JS 执行完毕。遇到文件下载的会去下载文件,这里如果使用 HTTP/2 协议的话会极大的提高多图的下载效率。
- Attachment:CSSOM 树和 DOM 树构建完成后会开始生成 Render 树。
- Layout: 布局。确定页面元素的布局、样式等等诸多方面的东西。
- GPU painting: 像素绘制页面,将内容显示在屏幕上了。
输入URL到页面渲染的更多相关文章
- 一文摸透从输入URL到页面渲染的过程
一文摸透从输入URL到页面渲染的过程 从输入URL到页面渲染需要Chrome浏览器的多个进程配合,所以我们先来谈谈现阶段Chrome浏览器的多进程架构. 一.Chrome架构 目前Chrome采用的是 ...
- 从浏览器输入URL到页面渲染的过程
零.背景 一个web安全工程师在学习web安全和web渗透时候,非常有必要了解整个WEB工作过程. 一.输入URL 这里是最基本的知识:URL是URI的一种实际应用,URI统一资源表示符,URL统一资 ...
- 从输入URL到页面渲染完成 -戈多编程
1.输入URL地址 2.浏览器根据域名查询IP地址 3.浏览器发送HTTP请求到web服务器 4.服务器返回一个永久重定向响应 5.浏览器会跟踪重定向地址 6.服务器处理请求 7.服务器返回一个HTM ...
- 从输入 URL 到页面加载完的过程中都发生了什么---优化
这篇文章是转载自:安度博客,http://www.itbbu.com/1490.html 在很多地方看到,感觉不错,理清了自己之前的一些思路,特转过来留作记录. 一个HTTP请求的过程 为了简化我们先 ...
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?
这个问题是老生常谈的问题啦,虽然说到处百度都有的答案,还是希望自己能总结一下. 如今有很多答案,都是从硬件开始讲起,比如键盘的响应或者触屏的响应,然后CPU处理到OS的内核等等.这里不作为重点来讲,要 ...
- 【原】老生常谈-从输入url到页面展示到底发生了什么
刚开始写这篇文章还是挺纠结的,因为网上搜索“从输入url到页面展示到底发生了什么”,你可以搜到一大堆的资料.而且面试这道题基本是必考题,二月份面试的时候,虽然知道这个过程发生了什么,不过当面试官一步步 ...
- 从输入url到页面加载完成发生了什么?——前端角度
这是一道经典的面试题,这道面试题不光前端面试会问到,后端面试也会被问到.这道题没有一个标准的答案,它涉及很多的知识点,面试官会通过这道题了解你对哪一方面的知识比较擅长,然后继续追问看看你的掌握程度.当 ...
- 从输入 URL 到页面加载完成的过程中都发生了什么
从输入 URL 到页面加载完成的过程中都发生了什么 过程描述 浏览器查找域名对应的 IP 地址: 浏览器根据 IP 地址与服务器建立 socket 连接: 浏览器与服务器通信: 浏览器请求,服务器处理 ...
- 一个页面从输入url到页面加载显示完成,中间都经历了什么
第一种解释: 一般会经历以下几个过程: 1.首先,在浏览器地址栏中输入url 2.浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容.若没有,则跳到第三步操作. 3 ...
随机推荐
- vue-router动态添加路由报错
[报错] Uncaught Error: [vue-router] route config "component" for path: /home cannot be a str ...
- NOIP的模板--考前复习
距离NOIP还有25天 可以去放弃一些巨难得题目去搞一些模板了 -------在校老师的原话 一·快排 虽然可以手打,最好用STL,里面有很多优化,会快很多 #include<iostream& ...
- Net Core Identity 身份验证:注册、登录和注销 (简单示例)
一.前言 一般我们自己的系统都会用自己设置的一套身份验证授权的代码,这次用net core的identity来完成简单的注册.登录和注销. 二.数据库 首先就是创建上下文,我这里简单的建了Users和 ...
- Vue2.0项目使用bootstrap后提示Module parse failed: Unexpected character
具体报错如下: 报错原因是: Vue2.0无法识别bootstrap.css中使用的字体,也就是上图中圈出来的地方. 解决方案: // 需要在webpack.config.js增加对不识别文件的处理 ...
- 面试开挂:近百道Java面试题整理
1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件. Java被 ...
- HTML和css面试题:内容转载
1.常见的块级元素 内联元素 div -最常用的块级元素 dl - 和dt-dd 搭配使用的块级元素 form - 交互表单 h1 -h6- 大标题 hr - 水平分隔线 ol – 有序列表 p - ...
- Linux PXE自动化安装centos6,centos7系统
1.PXE是什么? pxe是Preboot Excution Environment的缩写,是intel公司研发,基于client/server的网络模式,支持远程主机通过网络从远端服务器下载镜,并由 ...
- SQlALchemy session详解
系列文章: Python SQLAlchemy入门教程 概念 session用于创建程序和数据库之间的会话,所有对象的载入和保存都需通过session对象 . 通过sessionmaker调用创建一个 ...
- 4. 彤哥说netty系列之Java NIO实现群聊(自己跟自己聊上瘾了)
你好,我是彤哥,本篇是netty系列的第四篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 上一章我们一起学习了Java中的BIO/NIO/AIO的故事,本章将带着大家一起使 ...
- 通过javascript 执行环境理解她
古往今来最难的学的武功(javascript)算其一. 欲练此功必先自宫,愿少侠习的此功,笑傲江湖. 你将了解 执行栈(Execution stack) 执行上下文(Execution Context ...