来自浏览器原理的双倍快乐,搞懂了数据包的传输和为什么页面第二次打开快

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 本文分享浏览器关于数据包的传输和为什么页面第二次打开快的知识点。

前情提要

我经常和浏览器打交道,但是对它的了解又不够深,总觉得自己有点渣。

学习浏览器工作原理的Flag久已,可追溯到刚工作那会(一晃三十年过去了)。

今年不知是打通了任督二脉还是怎样,很多立下的豪言壮志竟然要一一实现了。(Flag一一被叶一一实现)。

从输入URL到页面展示的完整流程

想要了解数据包和页面渲染的相关内容,我们先来看一个基础又常见的知识点,浏览器从输入URL到页面展示都发生了什么。

一张流程图

                                                                                         ——蓝色:核心节点

图片果然能帮助梳理比较长的流程。

浏览器进程的概念,我上篇文章有解释过,浏览器的多进程架构包含多种进程,不同进程负责处理不同的任务。

从上图中可以看出,当浏览器输入URL之后,具体发生了什么以及各个进程之间是怎么配合的。

提炼时刻

1、浏览器输入URL之后,浏览器进程会将URL请求发送到网络进程进行解析;

2、网络进程先从缓存中查找该资源,查不到会进入网络请求流程;(如果查到了直接返回资源给浏览器进程)

3、请求前,先要进行 DNS 解析,用来获得请求域名的服务器 IP 地址;(如果请求协议是 HTTPS,还需要建立 TLS 连接)

4、得到IP地址之后,用IP地址和服务器建立TCP 连接。建立成功之后,浏览器会构建请求信息,然后向服务器发送请求信息。

5、服务器接收到请求信息后,会根据请求信息生成响应数据(包括响应行、响应头和响应体等信息),并发给网络进程。等网络进程接收了响应头信息之后,开始解析响应头信息。

6、浏览器进程接收到网络进程的响应头数据之后,便向渲染进程发送“提交文档”的消息;(前篇文章提到过,当页面打开时,浏览器会默认准备一个渲染进程)

7、渲染进程接收到“提交文档”的消息后,会和网络进程建立传输数据的“管道”;等文档数据传输完成之后,渲染进程会返回“确认提交”的消息给浏览器进程;

8、一旦文档被提交,渲染进程便开始解析页面和加载子资源。

9、经过一系列的资源加载和解析,最终页面内容就能呈现到浏览器上了。(具体怎么渲染,下篇单独讲讲)

一个数据包的"旅行"

上面输入URL获得页面的流程中,提到数据资源,这些数据资源是怎么被送达到浏览器呢?这将是一场神奇的旅程。

互联网中的数据是通过数据包进行传输的,传输包括两个关键步骤,数据包被送达主机和主机将数据包转给应用。(如果传输的数据很大,那么该数据就会被拆成多个小数据包)

UDP

UDP(User Datagram Protocol),用户数据报协议。主要作用是通过端口号将数据包分发给正确的应用。

以下是一个简化的UDP传输模型:

借助模型图,也就帮助梳理出一个数据包从主机A传输到主机B的流程:

1、主机A的上层将“掘金”的数据包交给传输层;

2、传输层会在数据包前面附加上UDP头,组成新的数据包,并交给网络层;

3、网络层接收之后,数据包前附加IP头,组成新的数据包,并交给底层;

4、将数据包传输到主机B的网络层,主机B会解开IP头信息,并将解开的数据部分交给传输层;

5、在传输层,数据包中的UDP头会被解开,并根据解开的数据中的端口号,把数据部分交给上层的应用程序

6、最终,一个“掘金”的数据包就传送到了主机 B 上层应用程序里。

旅行结束,知识点get

等等,这里有一行提示:

使用UDP发送数据,可能有各种因素导致数据包出错。 UDP可以校验数据是否正确,但对错误的数据包,不提供重发机制,只是丢弃当前的包,并且UDP在发送之后无法知道是否能达到目的地。

有点不靠谱,网络发展这么快,应该有靠谱的传输方式,于是TCP出现了。

TCP

TCP(Transmission Control Protocol)传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议

TCP单个数据包的传输流程和UDP流程差不多,但是,TCP头的信息可以保证数据传输的完整性。

保证数据传输的可靠性是有前提的,那就是牺牲了传输速度,因为TCP经典的“三次握手”和“数据包校验机制”,把传输过程中的数据包的数量提升了一倍。

划重点时刻

UDP和TCP各自有优缺点,两者的应用场景可以采用扬长避短的方式。

协议

应用场景

UDP

关注速度、不严格要求数据完整性的场景,如在线视频、互动游戏等。

TCP

需要可靠传输、流量控制的场景,比如电子邮件、文件传输、浏览器访问页面等。

为什么页面第二次打开快了很多

上面输入URL获得页面的流程中,提到了网络进程先从缓存中查找资源,换个角度看这段文字,也就是说浏览器会缓存资源。

一组趣味问答

问:那么什么时候会进行缓存呢?

答:第一次打开页面的时候。

问:都有哪些数据会被缓存呢?

答:DNS缓存和页面资源缓存这两块数据。

问:所以第二次打开快是因为第一次缓存耗时了吗?

答:是的。

问:DNS缓存和页面资源缓存,哪个耗时更长?

答:页面资源缓存。

浏览器资源缓存

讲浏览器资源缓存,就必须先上李兵老师课程里下面这张图了。

缓存查找流程示意图


流程梳理

1、第一次请求时,浏览器会从返回响应头中,通过Cache-Control字段来判断是否缓存该资源。通常,还会为这个资源设置一个缓存过期时长,缓存时长是通过Cache-Control中的Max-age参数来设置的,比如上图中设置的缓存过期时间是 2000s。

2、如果设置了缓存过期时长,会出现未过期和已过期两种情况:

  • 该缓存资源未过期的情况下,如果再次请求该资源,会直接返回缓存中的资源给浏览器。
  • 该缓存资源已过期的情况下,浏览器会继续发起网络请求,并且在 HTTP 请求头中带上 If-None-Match

3、服务器收到请求头后,会根据 If-None-Match的值来判断请求的资源是否有更新。

  • 如果没有更新,就返回304状态码。表示缓存可以继续使用,资源不会重复发送。
  • 如果资源有更新,服务器就直接返回最新资源给浏览器。

未完待续

文章写完之后,掌握了三部分知识点:

  • 从输入URL到页面展示的完整流程
  • 数据包如何进行传输
  • 为什么页面第二次打开快了很多

把之前学过的关于浏览器的散落的知识点串联起来,有点开心

目录
相关文章
|
6月前
|
缓存 JavaScript
vue阻止浏览器刷新和关闭页面提示
使用场景:在使用vuex进行缓存管理时,页面的缓存会随着页面关闭而消失,如果缓存动作仍在进行中,关闭页面会导致数据丢失,此时需要阻止页面关闭
1137 3
|
6月前
|
数据采集 Web App开发 JSON
浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)
本文以百度为实战案例演示使用WebScraper插件抓取页面内容保存到文件中。以及WebScraper用法【2月更文挑战第1天】
427 2
浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)
|
6月前
|
存储 缓存 前端开发
浏览器缓存工作原理是什么?
浏览器缓存工作原理是什么?
|
14天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
16天前
|
域名解析 缓存 网络协议
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
|
5月前
|
前端开发 安全 UED
【项目实战】从终端到浏览器:实现 ANSI 字体在前端页面的彩色展示
在学习和工作中,我们经常需要使用日志来记录程序的运行状态和调试信息。而为了更好地区分不同的日志等级,我们可以使用不同的颜色来呈现,使其更加醒目和易于阅读。 在下图运行结果中,我们使用了 colorlog 库来实现彩色日志输出。通过定义不同日志等级对应的颜色,我们可以在控制台中以彩色的方式显示日志信息。例如,DEBUG 级别的日志使用白色,INFO 级别的日志使用绿色,WARNING 级别的日志使用黄色,ERROR 级别的日志使用红色,CRITICAL 级别的日志使用蓝色。
|
5月前
|
Web App开发 XML 开发框架
技术心得记录:在IE浏览器中的奇怪页面表现
技术心得记录:在IE浏览器中的奇怪页面表现
55 0
|
1月前
|
前端开发 JavaScript 异构计算
简述浏览器的渲染原理
浏览器渲染原理主要包括以下步骤:1)解析HTML文档生成DOM树;2)解析CSS生成CSSOM树;3)结合DOM与CSSOM生成渲染树;4)布局计算(回流)确定元素大小和位置;5)绘制(Paint)将节点转为图形内容;6)合成(Composite)多层图像。整个过程从文档解析到最终输出完整网页,并通过优化技术提升性能。
|
6月前
|
Web App开发 JavaScript 前端开发
浏览器与Node.js事件循环:异同点及工作原理
浏览器与Node.js事件循环:异同点及工作原理
|
3月前
|
网络协议 前端开发 JavaScript
浏览器加载网页的幕后之旅:从URL到页面展示详解
【8月更文挑战第31天】当在浏览器地址栏输入URL并回车后,一系列复杂过程随即启动,包括DNS解析、TCP连接建立、HTTP请求发送、服务器请求处理及响应返回,最后是浏览器页面渲染。这一流程涉及网络通信、服务器处理和客户端渲染等多个环节。通过示例代码,本文详细解释了每个步骤,帮助读者深入理解Web应用程序的工作机制,从而在开发过程中作出更优决策。
62 5