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

B/S 架构通信原理详解

B/S 架构通信原理详解

一、核心架构

Browser/Server(浏览器/服务器)模型

  • 前端:浏览器作为统一客户端(Chrome/Firefox/Edge等)
  • 后端:服务器处理业务逻辑+数据存储(Nginx/Apache/Tomcat等)
  • 通信协议:基于 HTTP/HTTPS 的请求-响应模型

二、完整通信流程

sequenceDiagramparticipant 用户participant 浏览器participant DNSparticipant 服务器participant 数据库用户->>浏览器: 输入URL/点击链接浏览器->>DNS: 域名解析请求DNS-->>浏览器: 返回IP地址浏览器->>服务器: TCP三次握手浏览器->>服务器: 发送HTTP请求alt 动态资源服务器->>数据库: 数据查询/更新数据库-->>服务器: 返回数据end服务器->>浏览器: 返回HTTP响应浏览器->>浏览器: 渲染页面+加载资源浏览器->>服务器: 断开TCP连接

1. 用户发起请求

  • 触发方式:URL输入/链接点击/表单提交
  • 示例:https://www.example.com/login

2. DNS解析过程

步骤操作结果
1检查浏览器缓存命中则直接使用
2检查系统hosts文件本地静态映射
3请求本地DNS服务器ISP提供解析服务
4递归查询根域名服务器获得顶级域服务器地址
5查询权威DNS服务器最终获取IP地址

3. 建立网络连接

1. SYN
2. SYN-ACK
3. ACK
浏览器
服务器
  • HTTPS额外进行TLS握手(非对称加密协商会话密钥)

4. HTTP请求组成

POST /login HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-urlencoded
Cookie: session_id=abc123username=admin&password=123456
  • 请求行:方法(POST/GET) + 路径 + 协议版本
  • 请求头:Host/User-Agent/Cookie等元数据
  • 请求体:表单数据/JSON等有效载荷

5. 服务器处理流程

静态资源
动态资源
接收请求
资源类型
直接读取文件
转发到应用服务器
执行业务逻辑
访问数据库
生成响应内容
返回HTTP响应

6. HTTP响应示例

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Set-Cookie: session_id=xyz789
Cache-Control: max-age=3600<!DOCTYPE html>
<html><body>登录成功!</body>
</html>
  • 状态行:状态码(200/404/500) + 状态消息
  • 响应头:Content-Type/Set-Cookie等控制信息
  • 响应体:HTML/JSON/图片等实际数据

7. 浏览器渲染关键步骤

  1. 解析HTML构建DOM树
  2. 解析CSS构建CSSOM树
  3. 合并生成渲染树(Render Tree)
  4. 布局计算(Layout)
  5. 绘制显示(Painting)
  6. 执行JavaScript(可能修改DOM/CSSOM)

三、关键技术特性

1. 无状态协议解决方案

技术实现方式应用场景
Cookie服务器Set-Cookie → 浏览器存储会话标识
Session服务端存储用户状态 + ID关联Cookie购物车/登录状态
Token加密凭证包含用户信息JWT认证
URL重写在URL中附加session_id参数浏览器禁用Cookie

2. 连接管理演进

HTTP版本特性性能提升
1.0短连接(每次请求新建连接)
1.1持久连接(Keep-Alive)减少TCP握手开销
2.0多路复用(Multiplexing)并行传输多个请求/响应
3.0QUIC协议(基于UDP)解决队头阻塞问题

3. 安全机制

  • HTTPS加密流程
    1. 客户端发送加密套件支持列表
    2. 服务器返回证书+公钥
    3. 验证证书有效性(CA链)
    4. 生成会话密钥(非对称加密保护)
    5. 建立安全通道(对称加密通信)

四、B/S架构优劣势

优势劣势
✅ 零客户端安装(跨平台)❌ 依赖网络连接
✅ 集中式升级维护❌ 服务器性能瓶颈
✅ 天然跨平台兼容❌ 复杂交互体验受限
✅ 数据安全可控❌ 首次加载性能低
http://www.xdnf.cn/news/15479.html

相关文章:

  • 【数据结构】单链表练习(有环)
  • C++(STL源码刨析/stack/queue/priority_queue)
  • Rocky Linux 9 源码包安装php8
  • I3C通信协议核心详解
  • 描述统计1
  • 百度移动开发面经合集
  • 【PCIe 总线及设备入门学习专栏 5.1.2 -- PCIe EP core_rst_n 与 app_rst_n】
  • Java 大视界 -- Java 大数据机器学习模型在金融风险传染路径分析与防控策略制定中的应用(347)
  • HTML网页结构(基础)
  • 使用Spring Cloud LoadBalancer报错java.lang.IllegalStateException
  • Nestjs框架: 数据库架构设计与 NestJS 多 ORM 动态数据库应用与连接池的配置
  • QTableView鼠标双击先触发单击信号
  • 项目进度与预算脱节,如何进行同步管理
  • 从0开始学习R语言--Day47--Nomogram
  • 多租户SaaS系统中设计安全便捷的跨租户流程共享
  • 文心一言开源版部署及多维度测评实例
  • 深度解析 AI 提示词工程(Prompt Engineering)
  • 【YOLOv11-目标检测】06-模型部署(C++)
  • 可微分3D高斯溅射(3DGS)在医学图像三维重建中的应用
  • gRPC实战指南:像国际快递一样调用跨语言服务 —— 解密Protocol Buffer与HTTP/2的完美结合
  • AI 增强大前端数据加密与隐私保护:技术实现与合规遵
  • 20250715武汉xx公司面试一面
  • Springboot儿童认知图文辅助系统6yhkv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • React.FC与React.Component
  • 高并发四种IO模型的底层原理
  • [Dify]--进阶3-- 如何通过插件扩展 Dify 的功能能力
  • 深入浅出 RabbitMQ-核心概念介绍与容器化部署
  • ubuntu部署kvm
  • Linux操作系统从入门到实战(十)Linux开发工具(下)make/Makefile的推导过程与扩展语法
  • OpenCSG QA:您的国产大模型与 Agent 管理平台