与HTTP协作的web服务器

← 返回 MOC | ← 主页


代理

代理位于客户端和服务器之间,代表客户端转发请求,再把服务器的响应转回给客户端。对服务器来说,它看到的请求方是代理,不是真实客户端。

客户端 → 代理 → 服务器
客户端 ← 代理 ← 服务器

缓存代理(正向代理)

代理把服务器返回的响应缓存下来。下次有相同请求时,直接从缓存返回,不再去源服务器取。

  • 减少源服务器压力
  • 加快响应速度
  • 典型场景:公司内网统一出口代理

透明代理

对客户端透明,客户端不知道代理的存在,请求被网络设备自动拦截转发。内容不做修改,只做转发。

  • 典型场景:运营商的透明缓存节点

梯子(正向代理)

梯子是主动配置的正向代理,不是透明代理——你需要手动在系统或软件里设置代理地址,客户端完全知道它的存在。

你的电脑 → 梯子服务器(境外)→ Google/YouTube

防火长城(GFW)封锁的是你直接访问境外 IP 的流量。梯子的做法是:把请求先发给一台没被封的境外服务器,由它代替你去访问目标网站,再把结果转回来。GFW 看到的只是你和梯子服务器之间的加密流量,看不到你在访问什么。


网关

网关代表服务器,客户端把网关当作服务器来通信,实际内容由网关转发给后端真实服务器处理。

客户端 → 网关 → 后端服务器

CDN 举例:
访问百度,百度的源服务器在北京,距离远延迟高。百度在全国各地部署了 CDN 节点,离你最近的那个节点就是网关。你的请求打到这个节点,节点要么直接返回缓存内容,要么回源去北京取。对你来说,你只和这个近的节点通信,感知不到北京的源服务器。

网关还可以做协议转换,比如客户端用 HTTP,后端用数据库协议,网关负责中间转换。


隧道

隧道在客户端和服务器之间建立一条加密通信通路,隧道本身不解析 HTTP 内容,只负责透传。

  • 目的:保证通信安全
  • 典型场景:HTTPS 的 SSL/TLS 就是一种隧道;VPN 也是隧道
  • 隧道在通信双方断开连接时消失

缓存

什么是缓存

服务器或代理把资源的副本保存在本地,后续请求直接用副本响应,不再去源服务器取。

第一次:客户端 → 代理(无缓存)→ 源服务器 → 代理(存缓存)→ 客户端
第二次:客户端 → 代理(有缓存,直接返回)

缓存的有效期限

缓存不能永久有效,过期后需要重新向源服务器确认。

  • 强缓存:响应头带 Cache-Control: max-age=秒数Expires: 日期,在有效期内直接用缓存,不发请求
  • 协商缓存:缓存过期后,带上 If-Modified-SinceIf-None-Match 去服务器问”资源有没有变”
    • 没变 → 服务器返回 304 Not Modified,继续用缓存
    • 变了 → 服务器返回新资源 200 OK
响应头字段作用
Cache-Control: max-age=3600缓存有效期 3600 秒
Cache-Control: no-cache每次都要去服务器确认
Cache-Control: no-store不允许缓存
Expires指定过期的绝对时间(旧方式,优先级低于 max-age)
ETag资源的唯一标识,用于协商缓存
Last-Modified资源最后修改时间,用于协商缓存

客户端缓存(浏览器缓存)

浏览器本地也会缓存资源,流程和代理缓存一样,只是存在本地磁盘/内存里。

  • 强缓存命中:直接从本地读,状态栏显示 200 (from disk cache)200 (from memory cache)
  • 协商缓存命中:发请求,服务器返回 304,浏览器用本地副本
  • 都没命中:正常请求,服务器返回 200 和新资源

如果你正在跟随梳理, 返回 MOC←