老生常谈 - 从输入URL到页面加载的过程(详细版)

news2024/11/15 4:51:50

从输入URL到页面加载的过程

之前一直都是直接看一下总结的八股文章,对于实际的整个链路并不是特别熟悉,这次花了一天多的时间看了很多资料,对于整个页面加载的流程有了自己的理解,从前端开始访问的浏览器多线程、缓存等问题,到计算机网络的各层协议的处理,再到服务器接收请求的整个过程,都进行了一些了解,原始文档是在飞书中写的,所以在这边排版可能会存在一些问题,已经修改了一部分。
文章的不足之处也请大佬在评论中指出!

1. HTTP 解析URL:

浏览器是多进程,浏览器内核是多线程,浏览器接收URL,浏览器根据解析出的协议,根据解析的内容生成HTTP请求,开辟一个网络线程去请求资源,会先查找本地缓存是否缓存了该资源,如果有缓存资源那么直接返回资源给浏览器进程;如果在本地缓存中没有查找到资源,那么直接进入网络请求流程;

2. DNS(应用层协议) 解析:

如果输入的是域名,需要将域名解析成对应的 IP 地址,如果请求协议是HTTPS,那么还需要建立SSL/TLS连接(TLS的四次握手在TCP的三次握手之后);(DNS的解析过程见问题5) 通过DNS获取到IP之后,就可以把HTTP的传输工作交给操作系统中的协议栈。
[图片]

应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。
协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。
此外 IP 中还包括 ICMP 协议和 ARP 协议。
- ICMP 用于告知网络包传送过程中产生的错误以及各种控制信息。
- ARP 用于根据 IP 地址查询相应的以太网 MAC 地址。
IP 下面的网卡驱动程序负责控制网卡硬件,而最下面的网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收操作。

3. TCP 连接:

利用IP地址和服务器通过三次握手,建立 TCP 连接(HTTP是基于TCP协议传输的)(详细内容见问题15)

TCP 的连接状态查看,在 Linux 可以通过 netstat -napt 命令查看

4. 向服务器发送 HTTP 请求:

连接建立之后,浏览器端会构建请求行、请求头等信息,并把和该域名相关的 Cookie 等数据附加到请求头中,然后向服务器发送构建的请求信息。
五层协议栈:从应用层的发送http请求,到传输层通过三次握手建立tcp/ip连接,再到网络层的ip寻址,再到数据链路层的封装成帧,最后到物理层的利用物理介质传输。

  1. HTTP报文(请求方式+URL+数据)
  2. 传输层添加TCP头部(源端口号+目的端口号)
  3. IP 增加 IP报文头部(协议号(06表示协议为TCP) + 源IP地址 + 目的IP地址)
  4. 添加以太网头部(MAC地址):接收方 MAC 地址、发送方 MAC 地址 ARP协议通过广播的方式帮我们找到MAC地址
  5. 网卡将包转为电信号通过网线发出
  6. 交换机:电信号到达网线接口,交换机里的模块进行接收,将电信号转换为数字信号,校验完成之后,如果是发送给自己的则将包放入缓冲区,接下来查询接收方MAC地址,交换机根据 MAC 地址表查询 MAC 地址,然后将信号发送到相应的端口。

如果没有在MAC地址表中查询到指定的MAC地址,就将接收方MAC地址置为广播地址,将包发送到除了源端口之外的所有端口。

  1. 路由器:这一步转发的工作原理和交换机类似,也是通过查表判断包转发的目标
    在这里插入图片描述

5. 服务器处理请求,返回 HTTP 响应:

  1. Nginx可以处理静态请求,也可以将动态请求转发;
  2. Gateway网关处理,用于处理请求的路由、认证、授权等;
  3. 应用服务器服务器处理:请求被转发到后端服务器,执行相应的逻辑;
  4. 应用服务器生成HTTP响应。

6. 浏览器解析并渲染页面:遇到外链资源的情况下,会单独开启一个线程去下载资源;

7. 断开连接:TCP 四次挥手,连接结束

参考文档:

  1. 从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系! | Dailc的个人主页
  2. 一文读懂网关概念+Nginx正反向代理+负载均衡+Spring Cloud Gateway
  3. 在浏览器输入 URL 回车之后发生了什么(超详细版)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1248148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在华为昇腾开发板安装gdal-python

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 在华为昇腾开发板安装gdal-python分为两步:编译gdal库和下载gdal对应的python包。 1.编译gdal库 首先下载gdal库,。在linux(arm架构)上编译的gdal库及其第三方库源码,内含一个编译…

100%纯血鸿蒙来了,Android程序员影响甚大

“纯血鸿蒙”来了! 近日,美团、网易、今日头条、钉钉等多家互联网头部企业密集发布对鸿蒙系统相关人才的招聘信息,再度引爆市场对“纯血鸿蒙”的热议。 操作系统之“国货之光” 自2019年8月发布至今,鸿蒙系统已经更新到4.0版本…

为医药数据建起坚不可摧的堡垒——上海迅软DSE终端防泄密的力量!

某医药公司是一家综合性的医药产业公司,具有一定的规模和实力。其经营范围大范围,涉及到多个领域,包括药品、医药器械等的批发零售以及相关的互联网信息服务等。该公司在人员配置和知识产权方面也具备一定的优势,为其在医药产业的…

实验题【网关设置+VRRP+静态路由+OSPF】(H3C模拟器)

嘿,这里是目录! ⭐ H3C模拟器资源链接1. 实验示意图2. 要求和考核目标3. 当前配置3.1 PC1、PC2、PC3、PC4和PC5配置3.2 SW配置3.2.1 SW2配置3.2.2 SW3配置3.2.3 SW4配置3.2.4 SW1配置 3.2. R配置3.2.1 R1配置3.2.2 R2配置 ⭐ H3C模拟器资源链接 H3C网络…

SQL常见函数整理 _ LAG() 向上偏移

1. 用法 窗口函数,用于访问窗口中当前行之前的行的数据。该函数可以根据需要计算当前行之前的值,使我们能够轻松地比较不同行之间的差异和变化。 2. 基本语法 LAG(column, offset, default_value) OVER (ORDER BY column)column:代表在返回…

【Django笔记】10大模块md文档第6篇:Django视图、Cookie和session状态、模板和过滤器

Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展…

H5ke12--2--学生选课表格的编辑

方法1不可以修改的用label,如何按了哪一行 就会在下面有个文本显示可编辑的一行 方法2每一行后面都有一个编辑, 3对每一个修改,每一个td失去焦点都会有,直接到达我们服务器 注意 如果用span的每一个html元素都可以自己定义属性 Data-属性名,data-Address links也要给为span 1…

当班主任工资会高一些吗?

很多人在选择职业的时候,都会考虑到工资这一方面。而班主任这个职业,往往被认为是一种高收入的工作。那么,班主任的工资真的会比其他科任老师高吗? 班主任除了教学任务之外,还要负责管理班级的日常事务,包括…

Python入门03变量

目录 1 什么是变量2 变量声明3 变量命名规则4 变量类型5 类型转换总结 1 什么是变量 编程语言中变量就像容器一样,可以用来存放东西 我的变量就像杯子一样,可以用来盛放各种饮料。在Python中变量用来存放各种各样的数据,比如整数、浮点数、…

transformer训练与推理

以下transformer基于中译英任务 数据集原本的目标语言标签dec添加完padding后, 如果在dec前面加一个S构成了dec_input,而如果在dec后面加一个E构成了dec_output(输出的标签) attention 有两种,self attention(encoder里面的是源语言输入句子…

基于Springboot的冬奥会科普平台(有报告),Javaee项目,springboot项目。

演示视频: 基于Springboot的冬奥会科普平台(有报告),Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层…

jetson NX部署Yolov8

一,事情起因,由于需要对无人机机载识别算法进行更新,所以需要对yolov8算法进行部署到边缘端。 二,环境安装 安装虚拟环境管理工具,这个根据个人喜好。 我们需要选择能够在ARM架构上运行的conda,这里我们选择conda-forge 下载地址 安装即可 剩下的就是和conda 创建虚拟…

【Vue】vue指令

目录 V-html v-show和v-if v-show 显示 隐藏 v-if 显示 隐藏 总结 显示隐藏的应用场景 未登录的情况 登录的情况 v- else 和 v-else-if v-if 和v-else v-if 和 v-else-if 总结: v-on 语法一: 语法二: 调用传参 v-bind…

ruoyi-plus-vue部署

安装虚拟机 安装docker 安装docker 安装docker-compose 可能遇到的错误 Failed to deploy ruoyi/ruoyi-server:5.1.0 Dockerfile: ruoyi-admin/Dockerfile: Cant retrieve im age ID from build stream 安装 vim 命令 yum install vim -y 修改文件 vim /etc/resolv.conf …

1、Docker概述与安装

相关资源网站: ● docker官网:http://www.docker.com ● Docker Hub仓库官网: https://hub.docker.com/ 注意,如果只是想看Docker的安装,可以直接往下拉跳转到Docker架构与安装章节下的Docker具体安装步骤,一步步带你安…

set和map + multiset和multimap(使用+封装(RBTree))

set和map 前言一、使用1. set(1)、模板参数列表(2)、常见构造(3)、find和count(4)、insert和erase(5)、iterator(6)、lower_bound和upper_bound 2. multiset3. map(1)、模板参数列表(2)、构造(3)、modifiers和operations(4)、operator[] 4. multimap 二、封装RBTree迭代器原理R…

2023年P气瓶充装证模拟考试题库及P气瓶充装理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2023年P气瓶充装证模拟考试题库及P气瓶充装理论考试试题是由安全生产模拟考试一点通提供,P气瓶充装证模拟考试题库是根据P气瓶充装最新版教材,P气瓶充装大纲整理而成(含2023年P气瓶…

云原生基础概述

云原生的理解 在云原生这个概念还没流行起来的时候,公司开发了一款应用,这是「原生应用」,一般来说传统部署应用的方式都是通过购买物理的服务器,然后将需要上线的项目部署到物理服务器中跑起来。而购买物理机器,还要…

指针运算详解

1.引入 指针的基本运算有三种,分别是: • 指针- 整数 • 指针-指针 • 指针的关系运算 2.指针- 整数 因为数组在内存中是连续存放的,只要知道第⼀个元素的地址,顺藤摸⽠就能找到后⾯的所有元素。 int arr[10] {1,2,3,4,5,…

开发者神器-GitHub Copilot

关于费用 Copilot认证地址:https://web.52shizhan.cn/activity/copilot ① 无需账号,100%认证成功。 ② 支持windows、mac、linux系统。 ③ 可激活Jetbrains全系列,VsCode和Android Studio的Copilot插件,一键认证,100%秒成功。 …