当前位置: 首页 > article >正文

从键入网址到显示页面全流程(超详细版)

网络

👨‍🏫 小林coding 键入网址到网页显示,期间发生了什么

  • HTTP【端口:80】
    • 解析URL
      • 协议
      • Web服务器地址
      • 目录 + 文件名
    • 生成请求报文
      • 请求行
        • 请求方法(get、post …)
        • 请求路径
        • 协议的版本(HTTP/1.1)
      • 消息头
        • 键值对
          • 首部字段名
          • 首部字段值
      • 消息体
        • 数据
    • 扩展:响应报文
      • 状态行
        • 版本(HTTP/1.1)
        • 状态码
        • 状态短语(OK)
      • 消息头
        • 键值对
          • 首部字段名
          • 首部字段值
      • 消息体
        • 数据
  • DNS(域名转IP地址)
    • 前置须知:下面的步骤没有就往下,找到就返回
    • 浏览器域名的缓存
    • 操作系统缓存
    • hosts 文件
    • 本地 DNS 服务器
    • 发送 DNS 请求【UDP,端口:53】
      • 根域名服务器(不用于域名解析,指出顶级域名服务器地址)
      • 顶级域名服务器(.com)
      • 权威域名服务器(server.com)
    • 最终把域名转换为IP地址返回给本地DNS
  • 协议栈
    • 应用程序(浏览器)调用Socket
    • 委托操作系统的协议栈建立TCP连接
      • TCP 协议
      • UDP 协议
      • IP(传送网络包、确定路由)
        • ICMP
        • ARP
    • 网卡驱动程序
    • 物理网卡
  • TCP(可靠传输)
    • TCP 报文
      • 源端口号(16位)
      • 目标端口号(16位)
      • 序号(32位)
      • 确认序列号(32位)
      • 首部长度(4位)
      • 保留位(6位)
      • 状态位
        • SYN (Synchronize,同步序列号)
        • ACK (Acknowledgment,确认)
        • RST (Reset,重置)
        • FIN (Finish,结束)
        • PSH (Push,推送)
        • URG (Urgent,紧急)
      • 窗口大小(16位)【流量控制】
      • 校验和(16位)
      • 紧急指针(16位)
      • 选项
      • 数据【会把HTTP报文包装在这里】
    • TCP 三次握手建立连接
  • IP(远程定位)
    • IP 包格式
      • 版本(4位)
      • 首部长度(4位)
      • 服务类型 TOS(8位)
      • 总长度(16位)
      • 标识(16位)
      • 标志(3wei)
      • 片偏移(13位)
      • TTL(8位)
      • 协议号(8位)
      • 首部检验和(16位)
      • 源 IP 地址(32位)
        • 一个网卡绑定一个IP地址,多个网卡会有多个 IP地址
        • 路由表选 IP
          • 根据目标IP路由表项的子网掩码进行与运算
          • 与运算的结果 和 路由表项的目的IP进行匹配
            • 成功,选择此网卡绑定的IP
            • 失败,匹配下一个表项
          • 都没匹配成功,则走默认的网卡,子网掩码位0.0.0.0,目的IP也是 0.0.0.0
      • 目标 IP 地址(32位)
      • 选项
      • 数据(会把TCP数据包包装在这里)
  • MAC(两点传输)
    • MAC 包头部格式
      • 接收方 MAC 地址(48位)
        • 网卡生产时就写入ROM里的
      • 发送方 MAC 地址(48位)
        • ARP协议根据IP地址获取MAC地址
          • 先查询 ARP缓存
          • 没查到则 ARP广播查询
      • 协议类型(16位)
    • MAC包的数据
      • IP 数据包
  • 网卡(数字信息 转 电信号)
    • 数据链路层
    • 数据帧格式
  • 交换机
  • 路由器

Spring MVC

[Spring基础 - SpringMVC请求流程和案例](https://pdai.tech/md/spring/spring-x-framework-springmvc.html#spring-mvc%E7%9A%84%E8%AF%B7%E6%B1%82%E6%B5%81%E7%A8%8B)
  • 请求发给 DispatcherServelet**<font style="color:rgb(44, 62, 80);">DispatcherServlet</font>** 进行全局的流程控制
    • 通过 HandlerMapping 把 请求 映射成 HandlerExecutionChain【策略设计模式】
      • 一个处理器对象(页面控制器)
      • 多个 <font style="color:rgb(44, 62, 80);">HandlerInterceptor</font> 对象(或拦截器)
    • 通过 <font style="color:rgb(44, 62, 80);">HandlerAdapter</font>**<font style="color:rgb(44, 62, 80);"> </font>** 将处理器包装成适配器【适配器设计模式】
      • <font style="color:rgb(44, 62, 80);">HandlerAdapter </font> 根据适配的结果调用真正的处理器方法返回一个 <font style="color:rgb(44, 62, 80);">ModelAndView</font> 对象
        • 模型数据
        • 逻辑视图名
    • 通过ViewResolver<font style="color:rgb(44, 62, 80);">ModelAndView</font>的逻辑视图名解析成具体的<font style="color:rgb(44, 62, 80);">view</font>
    • 通过<font style="color:rgb(44, 62, 80);">View</font><font style="color:rgb(44, 62, 80);">model</font>数据模型进行渲染然后返回给DispatcherServelet
  • <font style="color:rgb(44, 62, 80);">DispatcherServlet</font>返回响应给用户

MySQL

[MySQL - 一条 SQL 的执行过程详解](https://pdai.tech/md/db/sql-mysql/sql-mysql-execute.html)

  • server层的连接器
  • 解析器
  • 优化器
  • 执行器
  • 从磁盘加载缓存数据到内存中的 Buffer Pool
  • 记录 undo日志
  • 执行SQL更新内存 Buffer Pool中的数据
  • 写 redo日志到 Redo Log Buffer
  • redo日志(prepare阶段)刷入磁盘【XA事务的参与者】
    • 先刷入 os cache
    • 再输入磁盘
  • 提交事务,binlog 文件写入磁盘【记录XA事务参与者的 ID】
  • redolog 写入 commit 标记

前端

渲染……


http://www.kler.cn/news/302845.html

相关文章:

  • Axure中继器介绍
  • 大屏可视化适配方案
  • 前端数组迭代方法分析
  • 【深度学习】多层感知机的从零开始实现与简洁实现
  • 【RabbitMQ】概述
  • GitHub图床
  • docker 进程的概念
  • 【STM32系统】基于STM32设计的智能垃圾桶(语音、颜色识别、称重、光强、烟雾、人体识别、步进电机、水泵)——文末资料下载
  • android.database.sqlite.SQLiteException: no such table
  • MySQL之DQL子查询
  • Windows系统Docker部署AList并挂载阿里云盘实现远程访问详细教程——“cpolar内网穿透”
  • 双指针算法专题(1)
  • 大模型入门3:理解LLAMA
  • Windows10 如何配置python IDE
  • 从小白到高手:Windows注册表基础运维全攻略
  • Linux软件包循环依赖解决 彻底删除i386架构 更新软件源
  • nginx_shell脚本扩展配置虚拟主机三种方式
  • 为什么np.arrange(0.97,3.0,0.01)最后一个值是3.0018,大于3
  • Qt-常用控件(2)-按钮类和显示类
  • [概率论] 随机变量的分布函数 (一)
  • Spring Boot项目更改项目名称
  • 亲测可用导航网站源码分享 – 幽络源
  • Rust的常量
  • 云微客AI文案编写,有手就能出“爆款”
  • 【全网唯一中文】bt回测框架中文文档,不是backtrader!是bt
  • win11 MySQL的坑
  • Machine Learning: A Probabilistic Perspective 机器学习:概率视角 PDF免费分享
  • 手机TF卡格式化后数据恢复:方法、挑战与预防措施
  • 【Hot100】LeetCode—62. 不同路径
  • Flask中的上下文(Context)