【面试题】在浏览器地址栏输入URL后会发生什么

news/2024/12/22 0:07:06/

1. 地址栏输入后的本地操作

当我们在浏览器的地址栏中,输入xxx内容后,浏览器的进程首先会判断输入的内容:

  • 如果是普通的字符,那浏览器会使用默认的搜索引擎去对于输入的xxx生成URL。
  • 如若输入的是网址,那浏览器会拼接协议名形成完整的URL。

当按下回车后,浏览器进程会将生成的完整URL发送到网络进程:

在这里插入图片描述

当网络进程收到传过来的URL后,首先并不会直接发出网络请求,而是会先查询本地缓存:

2. 到达后端服务器之前的操作

3. 到达后端服务器之后的操作

4. 服务器的响应操作

5. 总结

①用户在地址栏输入内容,浏览器判断后生成相应的URL并传给网络进程。
②网络进程先查询本地缓存,没有则解析URL并向DNS发送请求,得到IP。
③网络进程先与目标服务器进行TCP、TLS多次握手,建立TCP、TLS安全连接。
④紧接着组装请求报文,并由各个分层对数据进行封装,最终转为0、1格式。
⑤基于建立好的连接,利用物理介质传输数据,通过路由器控制数据的传输方向。
⑥请求会先去到CDN查询是否有缓存的内容,如果没有则继续向下请求。
⑦请求来到LVS后被转发到Nginx,再由Nginx转发到Gateway网关。
⑧Gateway网关根据配置好的API分发规则,将请求分发到具体服务。
⑨紧接着再从Nacos注册中心内,查询出该服务的具体服务实例IP。
⑩请求来到具体的服务器后,先通过端口号找到具体的WEB服务进程Tomcat。
⑪Tomcat基于SpringMVC的工作流程为请求定位到具体的Java后端方法。
⑫线程执行Java方法时,先去Redis中查询是否有数据,没有则查询MySQL。
⑬查询DB前先通过MyBatis生成SQL语句,然后再通过DB连接执行SQL。
⑭请求根据已配置的数据源地址,来到MySQL并执行SQL语句,从而获得数据。
⑮经过报文组装、数据封装、请求转发等操作,向客户端响应数据(原路返回)。
⑯应答报文经物理介质传输后,最终抵达客户端网络进程(可能会将数据加入缓存)。
⑰网络进程将数据交给浏览器之后,根据情况准备做TCP四次挥手,断开连接。
⑱浏览器创建渲染子进程,然后根据数据生成渲染树,最后绘制并显示页面。


http://www.ppmy.cn/news/1365044.html

相关文章

golang使用gorm操作mysql1

1.mysql连接配置 package daoimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger" )var DB *gorm.DB// 连接数据库,启动服务的时候,init方法就会执行 func init() {username : "roo…

binwalk安装记录和burpsuite安装记录

我的虚拟机环境是Ubuntu20.04 python有2.7的和3.8的 [[#binwalk|binwalk]] [[#binwalk#pip|pip]][[#binwalk#安装 sasquatch|安装 sasquatch]][[#binwalk#安装 jefferson|安装 jefferson]][[#binwalk#安装 ubi_reader|安装 ubi_reader]][[#binwalk#安装 yaffshiv|安装 yaffshi…

2.26作业

2.将信号灯集的函数二次封装 sem.c #include<myhead.h>union semun {int val; /* Value for SETVAL */struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */unsigned short *array; /* Array for GETALL, SETALL */struct seminfo *__buf;…

Eigen-Array数组类和系数式运算

Array数组类和系数式运算&#xff09; 一、概述二、数组类型三、访问数组中的值四、加减法五、乘法六、其他系数相关的操作七、数组和矩阵表达式之间转换 一、概述 Array类提供了通用数组&#xff0c;而Matrix类则用于线性代数。此外&#xff0c;Array类提供了一种简单的方法来…

Linux中死锁种类和解决方法

死锁&#xff1a; 第一种&#xff1a; 加了两次锁&#xff0c;导致还没解锁就想获得锁&#xff0c;一直阻塞&#xff1a; void*mythread(void *arg) {int n5000;int x;while(n--){pthread_mutex_lock(&mutex);pthread_mutex_lock(&mutex);xnumber;x;numberx;pthread…

如何选购油烟净化器?环保性能与个人需求的完美契合

我最近分析了餐饮市场的油烟净化器等产品报告&#xff0c;解决了餐饮业厨房油腻的难题&#xff0c;更加方便了在餐饮业和商业场所有需求的小伙伴们。 在选择油烟净化器时&#xff0c;环保性能与个人需求的完美契合至关重要。下面&#xff0c;让我们一起探讨如何选购适合自己的油…

初识Lombok

前言 最近读一些公司的业务代码&#xff0c;发现近几年的java项目工程中都使用了lombok&#xff0c;lombok是一个可以自动生成get,set、toString等模板类方法的工具框架&#xff0c;程序再引入lombok后&#xff0c;添加一个注解便可以不写get\set\toString等方法。 Lombok示例…

蓝桥杯Learning

Part 1 递归和递推 1. 简单斐波那契数列 n int(input())st [0]*(47) # 注意这个地方&#xff0c;需要将数组空间设置的大一些&#xff0c;否则会数组越界 st[1] 0 st[2] 1 # 这个方法相当于是递推&#xff0c;即先求解一个大问题的若干个小问题 def dfs(u):if u 1:print(…