飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • HTTP 基础

    • 认识HTTP协议与应用层定位
    • HTTP消息格式与报文结构
    • HTTP请求方法与幂等性
    • HTTP状态码详解
  • 连接与缓存

    • HTTP持久连接与版本演进
    • HTTP缓存机制
  • 状态与协商

    • Cookie与Session状态管理
    • HTTP重定向与内容协商
    • HTTP条件请求与范围请求
  • 安全与加密

    • HTTP认证机制
    • HTTPS与TLS握手
  • 协议演进

    • HTTP2核心特性
    • HTTP3与QUIC
  • 架构与实战

    • HTTP代理服务器与Web缓存
    • HTTP常见攻击与防御
    • HTTP实践工具与抓包分析

HTTP代理服务器与Web缓存

概念引入

想象广州飞翔科技的公司结构:图妹(产品经理)想订外卖,但她不能直接接触所有商家——前台云吞(社群运营)帮忙统一收单、筛选商家、甚至把常点的"老广烧腊"提前备好。这就是代理服务器(Proxy Server)的角色:介于客户端和源服务器之间的"中间人",帮双方跑腿、把关、加速。

而 Web 缓存则像公司茶水间的公共零食柜——有人把饼干放那儿,下次谁饿了直接拿,不用再去楼下便利店。


核心内容

代理服务器概念

代理服务器是位于客户端和源服务器之间的中间服务器,接收客户端请求后转发给目标服务器,再将响应返回给客户端。它既可以是"客户端的代言人",也可以是"服务器的守门员"。

飞翔公司的网络架构中,代理服务器就像凌叔(运维)在机房门口设的闸机——所有进出流量都要过一遍,既能记录日志,也能拦截风险。

正向代理:客户端的"代言人"

正向代理(Forward Proxy)靠近客户端,代表客户端向服务器发起请求。常见用途:

  • 访问控制:飞翔公司内网只允许通过代理访问外网,凌叔可以精确控制谁能访问什么
  • 匿名访问:隐藏客户端真实 IP
  • 内容过滤:拦截娱乐网站,保证航仔(后端)和风速(算法)专心写代码

场景:飞翔公司技术部在局域网内开发,空少(前端)需要引用外网的 CDN 资源。所有请求先发到公司正向代理,代理判断"这个 CDN 域名在白名单里",才允许访问。

反向代理:服务器的"守门员"

反向代理(Reverse Proxy)靠近服务器,代表服务器接收客户端请求。常见用途:

  • 负载均衡:将请求分发到多台后端服务器
  • 缓存加速:把热门响应存起来,减少后端压力
  • SSL 终端:统一处理 HTTPS 加密解密
  • 安全防护:隐藏真实服务器 IP,防御 DDoS

飞翔公司官网架构:

翼王(架构师)设计的官网架构中,Nginx 作为反向代理,把图片/CSS/JS 缓存到边缘节点,API 请求转发给航仔的后端集群。

Web 缓存工作原理

Web 缓存是代理服务器或浏览器本地存储的响应副本。当再次请求相同资源时,如果缓存有效,就直接返回副本,不用再去源服务器。

缓存命中 vs 缓存未命中

  • 缓存命中(Cache Hit):缓存里有且有效,直接返回 → 快如闪电
  • 缓存未命中(Cache Miss):缓存里没有或已过期,去源服务器取 → 慢如蜗牛

代理缓存的优势

优势说明飞翔公司场景
减少时延缓存离用户更近CDN 节点让全国用户快速访问官网
节省带宽重复请求不走源站波比(活动运营)的大促页面被缓存,省流量费
负载均衡分散请求压力雁姐(用户运营)推送通知时,缓存扛住高峰
可用性源站故障时缓存仍可服务凌叔升级服务器时,CDN 继续提供静态页面

透明代理 vs 非透明代理

  • 透明代理(Transparent Proxy):客户端不知道自己走了代理,无需配置。就像公司走廊里的自动感应门——你正常走,它默默帮你开。
  • 非透明代理(Non-transparent Proxy):客户端必须显式配置代理地址和端口。就像去前台登记才能借用会议室。

飞翔公司内网采用透明代理,员工电脑无需任何设置,所有 80/443 端口流量自动被重定向到代理网关。

浏览器缓存 vs 代理缓存

维度浏览器缓存代理缓存
存储位置用户本地磁盘代理服务器/CDN 节点
控制者用户/开发者运维/CDN 服务商
共享性仅当前用户所有用户共享
典型头部Cache-Control, ExpiresAge, X-Cache
清除难度用户可清浏览器缓存需联系运维或 CDN 刷新

飞翔公司使用 CDN 加速官网

飞翔科技的官网 www.feixiang.net 接入了 CDN(内容分发网络,一种大规模分布式反向代理缓存)。鸣哥(内容运营)上传了一篇新文章:

  1. 首次访问:北京用户请求 → CDN 节点未命中 → 回源到广州服务器 → 缓存到北京的 CDN 节点
  2. 再次访问:北京用户请求 → CDN 节点命中 → 直接返回,延迟从 80ms 降到 10ms
  3. 内容更新:鸣哥刷新 CDN 缓存,全国节点同步失效并重新拉取

本篇小结

  • 代理服务器:位于客户端和源服务器之间的中间服务器,可转发、过滤、缓存请求
  • 正向代理:靠近客户端,代表客户端访问外网,用于访问控制和匿名化
  • 反向代理:靠近服务器,用于负载均衡、缓存加速、SSL 终端和安全防护
  • Web 缓存:存储响应副本,命中时直接返回,减少时延和带宽消耗
  • Cache Hit:缓存有效,直接返回;Cache Miss:缓存无效,回源获取
  • 透明代理:客户端无感知;非透明代理:需客户端显式配置
  • CDN:大规模分布式反向代理缓存,让内容离用户更近

动手实践

温馨提示: 以下实践示例中涉及的域名(如 www.feixiang.net)、公司场景和接口均为虚构数据,仅用于演示协议原理,实际执行时可能不会产生文档中描述的效果。建议将命令中的域名替换为你自己可访问的真实地址进行练习。

实践:用 curl 观察代理缓存头部

# 查看响应中的缓存相关头部
curl -I https://www.feixiang.net

# 关注这些头部:
# Cache-Control: max-age=3600
# Age: 120          (已在缓存中停留120秒)
# X-Cache: HIT      (CDN缓存命中)
# X-Cache: MISS     (CDN缓存未命中)

实践:用 curl 测试通过正向代理访问

# 配置curl使用正向代理
curl -x http://proxy.feixiang.net:8080 http://example.com

# 带认证的正向代理
curl -x http://user:pass@proxy.feixiang.net:8080 http://example.com

实践:用 Chrome DevTools 观察缓存状态

  1. 打开 DevTools → Network 面板
  2. 访问 www.feixiang.net,观察 Size 列:
    • disk cache:从本地磁盘缓存读取
    • memory cache:从内存缓存读取
    • 具体数字:从网络下载
  3. 勾选 Disable cache 对比加载速度差异

实践:思考题

  1. 飞翔公司内网部署透明代理时,凌叔如何确保 HTTPS 流量也能被审计而不破坏安全性?
  2. 反向代理缓存了航仔的 API 响应,但 API 数据是动态的(如用户余额),如何避免缓存错误数据?
  3. CDN 节点遍布全国,鸣哥更新了一篇紧急公告,如何确保所有用户立即看到最新内容?

查看思考题答案

下一页
HTTP常见攻击与防御