only-if-cached 向代理请求已存储的响应
向协作式 HTTP 缓存索取已有响应,并把 504 理解为缓存未命中,而不是网络层面的出站管控。
对于应当使用已存储响应的请求,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 资源。