简单web服务器示例图

Web 服务器是客户端与后端应用之间的入口层,负责接收 HTTP/HTTPS 请求,并对请求进行处理、转发、优化和保护。

从实际开发角度,重点掌握下面这些就够全面了:

职责 作用 典型例子
① 接收 HTTP/HTTPS 请求 监听端口、建立连接、解析 HTTP 请求 监听 80/443
② 静态资源服务 直接返回 HTML、CSS、JS、图片、视频等 /static/logo.png
③ 路由与请求分发 根据域名、URL 等决定请求交给哪个服务 /api/user/* → user-service
④ 反向代理 将客户端请求代理到后端应用服务器 Nginx → Spring Boot
⑤ 负载均衡 将请求分配给多台后端服务器 Server1 / Server2 / Server3
⑥ HTTPS / TLS 管理证书、TLS 握手、加解密 HTTPS → 内部 HTTP
⑦ 缓存 缓存静态资源或响应,降低后端压力 Cache-Control、代理缓存
⑧ 压缩与性能优化 减少网络传输量、提高响应速度 gzip、Brotli
⑨ 安全与访问控制 限流、IP 控制、请求大小限制等 单 IP 每秒最多 100 请求
⑩ 日志与监控 记录请求、响应状态、耗时、错误 access.log、error.log
⑪ 错误处理 处理异常情况并返回合适的 HTTP 响应 404、502、503

最核心的工作流程

把上面所有东西放到一张逻辑图里,就是:

arduino 复制代码
                    客户端
              浏览器 / App / 爬虫
                     │
                     │ HTTP/HTTPS
                     ↓
          ┌─────────────────────┐
          │     Web Server      │
          │   Nginx / Apache    │
          │                     │
          │ ① 接收请求          │
          │ ② 解析请求          │
          │ ③ 路由/分发         │
          │ ④ HTTPS             │
          │ ⑤ 安全/限流         │
          │ ⑥ 缓存/压缩         │
          │ ⑦ 日志/监控         │
          └─────────┬───────────┘
                    │
          ┌─────────┴──────────┐
          ↓                    ↓
      静态资源              动态请求
          │                    │
     HTML/CSS/JS               │ 反向代理
     图片/视频                 ↓
          │             ┌──────────────┐
          │             │  后端应用    │
          │             │ Spring Boot  │
          │             │ Go / Python  │
          │             └──────┬───────┘
          │                    ↓
          │              MySQL / Redis
          │                    │
          └──────────┬─────────┘
                     ↓
                  返回响应

这里尤其要区分 Web Server 和后端应用:

Web Server 更关心"请求怎么进来、往哪里送、怎么安全高效地送"。

后端应用更关心"这个请求具体要执行什么业务逻辑"。

比如:

bash 复制代码
GET /api/users/1001

可能经历:

scss 复制代码
浏览器
  ↓
Nginx
  │
  ├─ HTTPS 解密
  ├─ 限流
  ├─ 记录日志
  ├─ 判断路由
  │
  ↓
user-service
  ↓
Spring MVC 路由
  ↓
UserController
  ↓
getUser(1001)
  ↓
MySQL

路由也可以这样理解

markdown 复制代码
Web Server 路由
     ↓
"应该交给哪个服务?"

后端框架路由
     ↓
相关推荐
王中阳Go6 小时前
两个入口答案不一致先别调模型:6 行入口口径对账表(附脚本)
人工智能·后端·python·大语言模型·1024程序员节
码事漫谈8 小时前
消除AI幻觉,普通人能做的五件事
后端
金銀銅鐵9 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
Mk5987811 小时前
给 Agent 装上对话框 —— AgentScope-Java 接入 Spring Boot 与 SSE 流式实战
后端
付威202311 小时前
从 Loop 到 Runtime:rpi Agent Loop 与 Cordis 的边界、取舍与组合
后端
IT_陈寒11 小时前
Redis的LRU淘汰策略坑了我一整天
前端·人工智能·后端
考虑考虑12 小时前
JDK26的JEP 500属性
java·后端·java ee
Mia_墨黎13 小时前
2026 Windows 11 终端美化完全指南
前端·后端
foreverYoung13 小时前
给开源后台做等保适配,我发现了 5 个"看起来有、其实没用"的功能 从一个尴尬的现场测试说起
后端