对于应当使用已存储响应的请求,HTTP 定义了 Cache-Control: only-if-cached。

客户端可以通过 HTTP 缓存代理发送它:

curl --proxy http://127.0.0.1:3128 \
  --header 'Cache-Control: only-if-cached' \
  --include http://www.example.org/report

遵循该指令的缓存应返回与请求其余约束一致的已存储响应;无法满足请求时则返回 504 Gateway Timeout。此处的 504 表达的是缓存策略,而非到代理的 TCP 连接失败。

该指令并不会自动放行陈旧内容。新鲜度、校验要求以及匹配的 Vary 字段依然重要。no-cache 请求指令则可能要求复用前先在源站完成成功校验。

这也不同于设置缓存的离线校验模式。only-if-cached 搭载在单个请求上,表达客户端愿意接收什么。

请使用支持该行为的缓存。被忽略的请求指令不是防火墙,因此要严格阻止向上游的流量,需要独立实施的网络或服务器策略。

普通的 HTTPS CONNECT 代理看不到加密的 HTTP 头,也不会保留该隧道中的页面对象。示例刻意使用缓存能够处理的明文 HTTP 资源。

相关文章