将 Squid 的选定 HTTP 请求重定向到 HTTPS
为已知支持 HTTPS 的站点返回客户端重定向,而不是悄悄改写每个 HTTP 源 URL,或假设代理能在源站创建 TLS 支持。
Squid 可以要求浏览器通过 HTTPS 重试选定的 HTTP URL。目标站点必须已经通过 HTTPS 提供相应资源;在 Raspberry Pi 上运行 Squid 并不会在网站上创造这种能力。
对于 Squid 7 的 url_rewrite_program 接口,helper 可以返回如下客户端重定向:
OK status=307 url="https://www.example.com/help"
这只是针对匹配请求的一个示例 helper 响应,而不是完整的 helper 程序。浏览器收到重定向后,会向 HTTPS URL 发出新请求。升级策略之外的 URL 可以返回 OK 并保持不变。
请使用已知支持 HTTPS 的目标列表,并解析传入的 URL。保留预期路径和 query,考虑显式端口,并有意识地处理请求方法。盲目替换每个 http 前缀,等于假设每个源站都有等效的 HTTPS 服务。
helper 必须按照已安装 Squid 版本的协议应答每一行输入。如果启用了并发 helper 通道,请在回复中保留通道标识符。旧的裸 301:URL 示例与当前的 result-and-key/value 格式不能互换。
当浏览器需要知道新 URL 时,应选择客户端重定向。rewrite-url 响应则要求 Squid 在客户端原始请求背后获取另一个 URL,这可能让应用的 URL 和状态不一致。
最初的 HTTP 请求在 helper 能够重定向之前就已经到达 Squid。该策略无法追溯保护那次请求。TLS 在随后的 HTTPS 连接上才开始;仅靠 CONNECT 隧道并不提供任何加密。