前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >浏览器页面呈现过程

浏览器页面呈现过程

作者头像
WindRunnerMax
发布于 2020-08-27 02:39:54
发布于 2020-08-27 02:39:54
67500
代码可运行
举报
文章被收录于专栏:Czy‘s BlogCzy‘s Blog
运行总次数:0
代码可运行

浏览器页面呈现过程

从输入链接到浏览器呈现页面的过程中,浏览器所经历的过程。

DNS解析

首先浏览器将输入的链接进行DNS解析,也就是将域名转换为IP地址的过程,得到了服务器具体的IP地址,才可以进行TCP链接以及数据的传输。 具体DNS解析的过程,浏览器首先检查自身的DNS缓存是否对于此域名有IP地址,chrome对于域名解析的缓存时间为60s,可以通过地址栏输入chrome://net-internals/#dns清除DNS缓存。若浏览器解析缓存未命中,则到操作系统中hosts文件检查域名与IP对应关系。若hosts文件未命中,则向本地域名服务器请求解析,本地域名服务器一般是运营商ISP提供的,一般是通过53端口发送UDP报文请求服务器解析DNS。若本地服务器解析未命中则会有两种解析方案:迭代解析与递归解析,一般来说,主机向本地域名服务器的查询一般都是采用递归查询,本地域名服务器向根域名服务器的查询通常是采用迭代查询,依次向根域名服务器、顶级域名服务器、主域名服务器等一级一级查询查询直到查询到IP地址。

TCP三次握手

HTTP协议是使用TCP协议作为其传输层协议的,在拿到服务器的IP地址后,客户端浏览器会与服务器建立TCP连接,该过程包括三次握手。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
client                                      server
主动打开 →          SYN=1,seq=x          → 被动打开,接收
(同步已发送)                               (同步收到)
接收     ←   SYN=1,ACK=1,seq=y,ack=x+1发送
(已建立链接)                               (同步收到)
发送     →      ACK=1,seq=x+1,ack=y+1接收
(已建立链接)                               (已建立链接)
  1. 第一次握手:客户端主动链接服务器,发送初始序列号seq=xSYN=1同步请求标志,并进入同步已发送SYN_SENT状态,等待服务器确认。
  2. 第二次握手:服务端收到消息后发送确认标志ACK=1与同步请求标志SYN=1,发送自己的序列号seq=y以及客户端确认序号ack=x+1,此时服务器进入同步收到SYN_RECV状态。
  3. 第三次握手:客户端收到消息后发送确认标志ACK=1,发送自己的序列号seq=x+1与服务器确认号ack=y+1,发送过后即确认链接已建立状态ESTABLISHED,服务端接收确认信息后进入链接已建立状态ESTABLISHED

SSL加密传输

SSL的建立是为了HTTPS加密传输,HTTPSHTTP的基础下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL

  1. 首先TCP三次握手建立链接,这是数据传输基础,在此之上开始SSL
  2. 客户端首先发送Client Hello开始SSL通信,报文中包含客户端支持的SSL版本、随机值Random1、加密算法以及密钥长度等。
  3. 服务器发送Server Hello,和客户端一样,在报文中包含SSL版本、随机值Random2以及加密组件,此后服务端将证书也发送到客户端。
  4. 此时客户端需要对服务端发送的证书进行验证,通过操作系统内置的CA证书,将服务器发送的证书的数字签名进行解密,并将证书的公钥进行相同算法的HASH与解密的数字签名解密的内容进行对比,验证证书是否合法有效,是否被劫持更换。
  5. 客户端验证证书合法,然后生成一个随机值Random3,用公钥对Random3进行加密,生成Pre-Master Key,客户端以Client Key Exchange报文将Pre-Master Key发送到服务端,此后发送Change Cipher Spec报文表示此后数据传输进行加密传输。
  6. 服务端将Pre-Master Key用自己的私钥解密为Random3,服务端发送Change Cipher Spec报文表示此后数据传输进行加密传输。
  7. 此时客户端与服务端都拥有三个随机字符串,且Random3是密文传输的,是安全状态的,此时则可以使用这三个字符串进行对称加密传输。由于非对称加密慢,不能每次传输数据都进行非对称加密,所以使用非对称加密将密钥协商好然后使用对称加密进行数据传输。
  8. 此时便正常进行HTTP数据传输,但是由于SSL加密的作用,此时的HTTP传输便是安全的,此为HTTPS的传输过程,其中2356也被称为SSL四次握手。

发起请求

浏览器构建HTTP请求报文,并通过TCP协议传送到服务器的指定端口,HTTP请求报文一共有三个部分,报文首部,通常包含请求行与各种请求头字段等;空行,告诉服务器请求头部到此为止),报文主体,即发送的数据信息,通常并不一定要有报文主体。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 报文首部 -->
GET / HTTP/1.1 <!-- 请求行 -->
accept: text/html
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9 
... <!-- 请求头 -->
<!-- 空行 -->

<!-- 报文主体 -->
u=1&t=1587699008

响应报文

服务端响应HTTP请求,返回响应报文,HTTP响应报文由四部分组成:响应行、响应头、空行、响应体。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTP/1.1 200 OK <!-- 响应行 -->
content-encoding: gzip
content-type: text/html; charset=utf-8
date: Fri, 24 Apr 2020 03:34:50 GMT
... <!-- 响应头 -->
<!-- 空行 -->

<!-- 响应体 -->
{"status":1, "msg": "success"}

浏览器渲染页面

  1. 自上而下,首先解析HTML标签,生成DOM Tree
  2. 在解析到<link>或者<style>标签时,开始解析CSS,生成CSSOM,值的注意的是此时解析HTML标签与解析CSS是并行执行的
  3. 当遇到<script>标签后,浏览器会立即开始解析脚本,并停止解析文档,因为脚本有可能会改动DOMCSS,继续解析会浪费资源,所以应当将<script>标签放于<body></body>
  4. DOM TreeCSSOM生成后,将两者结合进行布局,计算它们的大小位置等布局信息,形成一个能够表示这所有信息的内部表示模型,可称为渲染树render tree
  5. 根据计算好的信息绘制整个页面,系统会遍历渲染树,并调用paint方法,将内容显示在屏幕上。

断开TCP链接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
client                                      server
主动关闭 →          FIN=1,seq=u          → 被动关闭,接收
(终止等待1)                               (关闭等待)
接收     ←      ACK=1,seq=v,ack=u+1发送
(终止等待2)                               (关闭等待)
接收     ←   FIN=1,ACK=1,seq=w,ack=u+1发送
(时间等待)                                (最后确认)
发送     →      ACK=1,seq=u+1,ack=w+1接收
(时间等待 2MSL 关闭)                      (关闭)
  1. 第一次挥手:客户端发出释放标识FIN=1,自己的序列号seq=u,进入终止等待FIN-WAIT-1状态
  2. 第二次挥手:服务端收到消息后发出ACK=1确认标志和客户端的确认号ack=u+1,自己的序列号seq=v,进入关闭等待CLOSE-WAIT状态,客户端收到消息后进入终止等待FIN-WAIT-2状态
  3. 第三次挥手:服务器发送释放标识FIN=1信号,确认标志ACK=1,确认序号ack=u+1,自己的序列号seq=w,服务器进入最后确认LAST-ACK状态
  4. 第四次挥手:客户端收到回复后,发送确认标志ACK=1,确认序号ack=w+1,自己的序列号seq=u+1,客户端进入时间等待TIME-WAIT状态,经过2个最长报文段寿命后,客户端CLOSE。服务器收到确认后,立刻进入CLOSE状态。

相关

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TCP三次握手四次挥手 https://github.com/WindrunnerMax/EveryDay/blob/master/Browser/TCP%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B.md
HTTP协议概述 https://github.com/WindrunnerMax/EveryDay/blob/master/Browser/HTTP%E5%8D%8F%E8%AE%AE%E6%A6%82%E8%BF%B0.md
HTTPS加密传输过程 https://github.com/WindrunnerMax/EveryDay/blob/master/Browser/HTTPS%E5%8A%A0%E5%AF%86%E4%BC%A0%E8%BE%93%E8%BF%87%E7%A8%8B.md
浏览器渲染与内核 https://github.com/WindrunnerMax/EveryDay/blob/master/Browser/%E6%B5%8F%E8%A7%88%E5%99%A8%E6%B8%B2%E6%9F%93%E4%B8%8E%E5%86%85%E6%A0%B8.md
对称加密与非对称加密 https://github.com/WindrunnerMax/EveryDay/blob/master/Browser/%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86%E4%B8%8E%E9%9D%9E%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86.md

参考

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://www.jianshu.com/p/d616d887953a
https://www.cnblogs.com/lhh520/p/10232738.html
https://blog.csdn.net/bjweimengshu/article/details/78978314
https://blog.csdn.net/wlk2064819994/article/details/79756669
https://blog.csdn.net/weixin_40659167/article/details/86510745
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
浏览器
从输入一个地址开始,它可以是这样的 www.baidu.com, 也可以是这样的 https://admin:admin@www.gschaos.club:80/dir/file1.html, 咋一看好像都能看懂,而且还知道这么输入会得到什么,更言之还能断点调试一下; 可是输入一个网址到底发生了什么?
一滴水的眼泪
2020/09/24
13.4K0
浏览器
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
在软件开发、Java、后端的面试中,浏览器中输入URL到页面返回的全过程 是一道非常经典的面试题,更是经常被作为面试的压轴题出现。有时也会通过其他方式来问,譬如:
寻求出路的程序媛
2024/11/05
2990
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
前端八股文(未完待续······)
http: 是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的超文本传输协议。 https:是以安全为目标的 HTTP 通道,即 HTTP 下 加入 SSL 层进行加密。其作用是:建立一个信息安全通道,来确保数据的传输,确保网站的真实性。
世间万物皆对象
2024/03/20
930
Android 面试 - 网络基础会问哪些问题及其解答
Android 面试中问到网络基础,基本是围绕 OSI 七层模型或者是 TCP/IP 四层模型展开的,主要包括各层名称及功能、每层有哪些协议。 另外会深入考察应用层和传输层。 应用层:(HTTP、DNS 等) HTTP 报文格式、头部有哪些字段 HTTP 状态码 HTTP 和 HTTPS 的区别 HTTPS 中 SSL/TLS 加密的握手过程 HTTP 一次连接的具体过程 GET、POST 的区别 DNS 解析过程 Cookie、Session 原理 传输层:(TCP、UDP 等) TCP/IP 四层模型(
非著名程序员
2018/02/02
8160
Android 面试 - 网络基础会问哪些问题及其解答
网络协议
HTTP 通常跑在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP 协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通信。此外,还有一些协议依赖于 HTTP,例如 WebSocket、HTTPDNS 等。这些协议相互交织,构成了一个协议网,而 HTTP 则处于中心地位。
Michel_Rolle
2023/11/20
2.6K0
计算机网络详解(强推经典字典帖)
如果同个浏览器发起第二次请求给服务器时,它还是会响应。但是呢,服务器不知道你就是刚才的那个浏览器。
IT运维技术圈
2022/10/24
4210
【前端词典】进阶必备的网络基础
在不那么遥远的一些年以前,一个在江湖中行走的前端,只需要了解“前端三剑客”就足以找到一份工作。很多前端只限于 CSS,HTML、JS,网络基础,数据结构之类的都不甚了解。不过这个时期的前端也是最受鄙视的时期,这个时期前端的大量工作依赖于后端,且不需要动画效果和交互效果。
小生方勤
2019/06/01
8750
一文了解TCP知识讲的明明白白
在计算机网络的基本概念中,分层次的体系结构是最基本的。计算机网络体系结构的抽象概念较多,在学习时要多思考。这些概念对后面的学习很有帮助。
小丑同学
2020/11/17
7750
一文了解TCP知识讲的明明白白
即时通讯初学者必知必会的20个网络编程和通信安全知识点
即时通讯IM应用开发的初学者很容易迷失在网络编程的复杂性以及通信安全的各种概念里,本文不涉及深度理论知识,尽量通过一句话或几句话让你快速了解20个相关的网络编程和通信安全知识点,希望能助你愉快地开始即时通讯应用开发。
JackJiang
2025/02/27
1090
即时通讯初学者必知必会的20个网络编程和通信安全知识点
面试 HTTP ,99% 的面试官都爱问这些问题
HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol),HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范
cxuan
2020/04/21
1.4K0
面试 HTTP ,99% 的面试官都爱问这些问题
带你全面了解Http和Https(开发人员必备)
Http和Https属于计算机网络范畴,但作为开发人员,不管是后台开发或是前台开发,都很有必要掌握它们。
Criss@陈磊
2019/08/01
8160
2019秋招:460道Java后端面试高频题答案版【模块五:计算机网络】
计算机网络、计算机操作系统这两个“兄弟”是所有开发岗位都需要“结拜”的,不管你是 Java、C++还是测试。对于后端开发的童鞋来说,计算机网络的重要性不亚于语言基础,毕竟平时开发经常会和网络打交道,比如:抓个包等等。所以对这一块知识点的准备还是要抱着敬畏之心,不要放过任何一个漏网之题。下面分享下我的学习过程:
乔戈里
2019/09/25
8810
2019秋招:460道Java后端面试高频题答案版【模块五:计算机网络】
阿里前端常见面试题(附答案)
语义化是指根据内容的结构化(内容语义化),选择合适的标签(代码语义化)。通俗来讲就是用正确的标签做正确的事情。
loveX001
2022/09/12
5130
计网 & OS
两次握手的话服务端无法确认自己发送和对方接收是否正常,三次握手就能确认双发收发功能都正常,缺一不可。
小简
2022/12/29
8600
计网 & OS
计算机网络经典20问!
计算机网络体系大致分为三种,OSI七层模型、TCP/IP四层模型和五层模型。一般面试的时候考察比较多的是五层模型。
程序员大彬
2021/10/04
3340
计算机网络经典20问!
面试反客为主 TCP
承接上文 HTTP,数据经过应用层就到传输层,但数据到传输层之前需要先获得服务端的 IP 地址,这就涉及到 DNS 域名解析。
sowhat1412
2022/09/20
3090
面试反客为主 TCP
计算机网络知识(TCP连接,TCP/UDP区别,HTTP与HTTPS,Socket原理等等)
1、网络七层协议包含,物理层、数据链路层、网络层(ip协议)、传输层(TCP传输控制协议、UDP用户数据报协议)、会话层、表示层、应用层(http协议)。是一个提供的概念架构协议。
别先生
2019/12/20
2.6K0
计算机网络知识(TCP连接,TCP/UDP区别,HTTP与HTTPS,Socket原理等等)
从输入URL到Web页面呈现的全过程
简单来说,当用户在浏览器的地址栏中输入 URL 并点击回车后,浏览器从服务端获取资源,然后将内容显示在页面上。这个过程经过了:浏览器缓存 -> DNS 域名解析 -> URL 编码 -> 使用 HTTP 或者使用 HTTPS 协议发送请求 ->
真正的飞鱼
2023/03/04
8540
从输入URL到Web页面呈现的全过程
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
本文对于计算机面试、笔试过程中经常被问到的计算机网络类问题,做一个梳理总结,方便自己查看学习,同时也希望为其他找工作、学习的伙伴提供一个参考。
寻求出路的程序媛
2024/11/07
1850
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
浏览器从输入网址到页面展示的过程
完整高频题库仓库地址:https://github.com/hzfe/awesome-interview
HZFEStudio
2021/09/18
20K0
推荐阅读
相关推荐
浏览器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验