网页是如何显示在浏览器

2023-11-19

这两天学习了一些网页如何在浏览器中显示的知识,感觉在我向前端走的路上非常有用,所以就在这里总结一下,大家可以看看,我也算是巩固一下知识。因为自己学识太浅,内容可能有一些错误之处,希望看到的朋友可以指出来啦。

在Edge浏览器也加入Chromium的情况下,我在这里就以现代浏览器来说下浏览器渲染出网页的过程。

下面开始正文:

总括页面加载过程

简述

  1. 浏览器向服务器发送请求。
  2. 服务器做出响应,给浏览器返回信息,这些信息就是页面的HTML 文档了。
  3. 浏览器根据文档,调用浏览器内部程序,将文档转化为我们所看到的样子显示出来。

如果只是想看浏览器加载页面过程的朋友可以直接向下滑到”浏览器渲染页面“的位置,前两部分涉及更多的是计算机网络的知识,感兴趣的可以了解一下。

浏览器发送请求

比如我们在百度或者Google的时候,会在搜索框中输入想要搜索的内容,然后点击搜索,页面就会跳转,并且列出我们可能需要的信息,我们再进行挑选查看。

首先看一下我们网络中使用的TCP/IP模型

pic  TCP/IP模型

TCP/IP模型共有4层,每层都有各自的功能,而且每层都不关心其他各个层的工作,只是做自己本职的工作,同一结点(可以理解为每一个网络站点、服务器、电脑主机等)相邻层之间通过接口通信,不同结点的的相同层之间通过协议通信(如TCP、UDP、HTTP等)。更详细的可以去看看这里,或者可以看看谢希仁的《计算机网络》,非常经典的一本书。

还有一个叫OSI模型,由于这里面不同模型之间关系不是特别适合实际应用(共有7层模型,而且有些不同层又有相同的功能),只是在进行网络设计的时候会参考一下,而且是第一个公认的网络模型。

在TCP/IP协议中,浏览器属于最上层的应用层。当我们鼠标点击搜索或者回车后,就会产生一个事件,这个事件会根据网页代码转化为一个API请求, 其实也会转化成一个文本数据,请求会传递到服务器去查找数据库,从而得到我们想要的东西,而在这其中还要经过TCP/IP的其他所有层才能通过网线传输请求到达服务器。

在应用层使用HTTP协议,HTTP协议根据规则,会打包数据,这时候也会使用HTTPS,来加密数据,防止中途有人篡改我们的数据,保证数据可以准确传输到服务器。打包数据后,应用层会将数据发送到80端口(默认是80端口,也有可能是别的端口),到达传输层。

到达传输层,这里会给数据加一个头部,其中含有源端口号和目的端口号、序号(报文段序号)、校验等等信息。在这一层用到的协议就是TCP协议。

TCP协议是面向连接的,在实际运行中类似与A与B两个人使用微信聊天,A对吧说:”在吗“,B回答说:”在“,两个人就开始聊天了。还有一种协议叫UDP,是面向无连接的,就好比A对B说:”你刚好在楼下,帮我带瓶水上来“,然后B有可能会看到消息,也可能看不到消息。也就是说A与B的通信并没有建立链接。

当传输层完成多有任务后,会将数据传送给下一层的网络层。

网络层 (也叫网际层、互联层)会有一个重要的设备,就是路由器,路由器可以对数据进行存储转发。在这里,我们使用的协议是IP协议IP协议 也会给数据添加一个头部,里面含有源IP地址,和目的IP地址(如192.168.1.1),还有很多其他东西就不说了,最后再加一个尾部,用于定界和帧校验 (如CRC校验) 。这时候就可以把数据传递给最下面的链路层了。

链路层 (也叫物理层,网络层-如果上一层叫互联层的话) 是面向比特流的也就是 011001100001 这种数据,以便通过网线进行长距离传输。在这里基本都是网卡完成的,每张网卡都有一个专属的地址,叫物理地址,也就是我们常说的MAC地址,用这个便可以找到全球任何一台网络设备(嗯?MAC地址克隆,不了,好像法律不允许)。在链路层,也会添加一个头部,其中包含源MAC地址,目的MAC地址等,最后会将整个数据帧转化成二进制比特流传输出去。

经过多个路由器、交换机等,我们的数据就会千里迢迢到达远方的服务器,服务器也会有跟我们电脑类似的网络层级结构,会一层一层将头部、尾部去掉(可能像剥洋葱),得到我们的API请求

服务器响应请求并回答浏览器

得到请求,服务器会在数据库中检索信息,通过算法对我们的信息加以修饰(度娘的广告?),准备发送到我们的计算机。

回来的路跟我们的数据去的路是类似的,也需要经过传输层、网络层、链路层,最后通过二进制比特流将信息传递给我们的计算机。

计算机会逆序,通过链路层、网络层、传输层的顺序将数据拆开、最后得到的就是我们网页需要显示的HTML文档。

上面都是浏览器向服务器请求数据的网络部分,下面是浏览器得到数据后渲染页面的部分,作为搞前端的,几乎可以不用管上面的部分,那些都是计算机会自己进行的。

浏览器渲染页面

整体过程是这样的:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网页是如何显示在浏览器 的相关文章

  • setTimeout异步

    同步任务和异步任务 同步和异步操作的区别就是是否阻碍后续代码的执行 同步任务是那些没有被引擎挂起 在主线程上排队执行的任务 只有前一个任务执行完毕 才能执行后一个任务 异步任务是那些被引擎放在一边 不进入主线程 而进入任务队列的任务 只有引
  • 【IEEE 13 节点分配系统中的THD降低】系统的谐波分析给出了各种总线上电流和电压的谐波频谱和THD(Simulink实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Simulink仿真实现 1 概述 IEEE 13 节点分配系统中的THD
  • 第三方微信登陆的后台实现

    关于微信第三方的开发 官方文档给了很详细的解析说明 有不清楚流程的同学可以先去官网学习 而我这里主要是整理一下自己的后台处理流程 其实微信登录就是通过用户的授权 允许app获取用户的微信信息 再往自己的数据库插入获取的信息 这里用手机app

随机推荐

  • 6. C++知识点之三目运算符

    三目运算符 C 有一个常用来代替if else语句的操作符 这个操作符被称为三木运算符 它是C 中唯一一个需要3个操作数的操作符 该操作符的通用格式如下 b a c 如果b为真 则整个表达式的值为a 否则表达式的值为c 下面两个语句演示了该
  • 千万并发连接下,如何保障网络性能

    点击一键订阅 云荐大咖 专栏 获取官方推荐精品内容 学技术不迷路 过去几十年互联网呈爆发式的增长 内容的丰富以及层出不穷的DDoS攻击等 对网络性能提出了极大的挑战 也同样促进了网络基础设施的快速发展 运营商的带宽越来越大 CPU 网卡等硬
  • Ubuntu /etc/security/limits.conf 不生效

    遇到报错 RuntimeError unable to open shared memory object in read write mode 查到的教程说需要ulimit n 设置一个比较大的数 用ulimit n 发现最大是1024
  • Element组件浅尝辄止5:Empty 空状态组件

    Empty空状态组件 空状态时的占位提示 如第一次进入当前功能模块时 数据状态为空 则展示空状态 可用到Empty组件 1 How
  • 可以向同事学学shader了

    今天无意中和同事聊天 发现他竟然会级联阴影 级联阴影不是新技术 但是我见过的 能用的真少 大多数停留在理论阶段 可能是我遇见的优秀的人不多吧 不管怎样 立足现在公司 多向高手学习
  • 《Effective Modern C++》第0章学习记录

    Acknowledgement C 0x C 11 C 14 Usenet newsgroup comp std c Stack Overflow Overview of the New C Modern C Design Going na
  • SQL语句大全(第21天) (转)

    第一大章 创建数据库 CREATE 创建 DATABASE 数据库 ace 数据库名字 打开数据库 USE 打开 ace 数据库名字 给表格 SHOW 显示 TABLES 所以列表名字 创建表 用户名 id ID user 用户 passw
  • 大数据基础

    1 HDFS 1 HDFS为什么不适合存储大量小文件 答 1 大量文件的元数据占用NameNode大量内存空间 2 磁盘寻道时间超过读取时间 2 HDFS 何时离开安全模式 答 ActiveNameNode启动时HDFS进入安全模式只读 d
  • 剑指Offer 12—矩阵中的路径

    题目描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 如果 word 存在于网格中 返回 true 否则 返回 false 单词必须按照字母顺序 通过相邻的单元格内的字母构成 其中 相邻 单元格是那些水平相邻
  • 日志清理脚本,升级版

    root ip 10 172 10 35 cat usr local shell iop ps data rm sh bin bash 获取15天之前的日期 del date date Y m d d 15 days ago 获取30天之前
  • 【C#基础】C# 预处理器指令

    序号 系列文章 8 C 基础 C 面向对象编程 9 C 基础 C 异常处理操作 10 C 基础 C 正则表达式 文章目录 前言 1 预处理器指令的概念 2 预处理器指令的定义与使用 2 1 可为空上下文 2 2 定义符号 2 3 条件编译
  • Windows无法访问\\ 请检查名称的拼写。否则,网络可能有问题。

    Windows无法访问 请检查名称的拼写 否则 网络可能有问题 错误代码 0x80070053 网络路径键入不正确 不存在或者网络提供程序当前不可用 请尝试键入路径或与网络管理员联系 遇到局域网内无法打开共享打印机时出现的问题 解决方法 打
  • python的安装与环境配置

    一 访问python的官网进行下载对应的版本 python官网的地址 Welcome to Python org 点击Downloads 选择Download Python 3 11 4 目前最新的python 也就是3 11 4 之后等待
  • Redisson框架官方介绍

    我们现在看到的就是redission官方网站 https redisson org 首页可以看出来 redisson可以实现很多东西 在redisson的基础上 redisson做了超多的封装 我们看一下 例如说 Spring Cache
  • python获取windows窗口_pywin32 怎么获取 windows 的窗体内文本框的内容?

    我已经用 spy 去确认我找到了文本框的句柄了 用函数 win32gui SendMessage 获取不了文本框的文本内容 用 str 类型的参数接收获取的内容的话没有获取到东西 而用 PyBuffer 类型去获取则得到类似于 16 进制的
  • 助你解锁万物智联新机遇 —— YMatrix 超融合数据库

    近期 在 YMatrix 5 0 发布会上 四维纵横创始人 CEO 姚延栋分享了 返璞归真 以简驭繁 YMatrix 超融合数据库 5 0 发布 的主题演讲 在本次演讲中 介绍 YMatrix 超融合数据库的发展历程及现阶段的技术痛点 深入
  • Leetcode Shortest Palindrome (最短回文串)

    Leetcode Shortest Palindrome 最短回文串 题目描述 Given a string S you are allowed to convert it to a palindrome by adding charact
  • clang 01. clang driver流程分析

    文章目录 前言 在这里简要概述一下clang的流程 1 clang driver代码分析 1 1创建诊断 DIagnosticsEngine 实例 1 2创建Driver clang driver Driver 的实例 1 3通过 Driv
  • 计算机勾兑双绝是谁发明,勾兑大师范玉平之“舌尖上的五粮液”

    1958年 那是一个热火朝天的时代 在五粮液酒厂的仓库里 人们总能看到一位斯斯文文的小伙子 在一阵阵紧张的收货发货后 不紧不慢地将那些大大小小的酒坛收拾得整整齐齐 之后他便一边对着账本 一边慢条斯理地抿着小酒 尽管他手中的酒杯里常常只有半杯
  • 网页是如何显示在浏览器

    这两天学习了一些网页如何在浏览器中显示的知识 感觉在我向前端走的路上非常有用 所以就在这里总结一下 大家可以看看 我也算是巩固一下知识 因为自己学识太浅 内容可能有一些错误之处 希望看到的朋友可以指出来啦 在Edge浏览器也加入Chromi