代理的自定义拦截页对 HTTP 站点会正常出现。而对于 HTTPS 站点,浏览器反而显示隧道错误。再次替换 HTML 模板可能毫无作用。

使用显式 HTTP 代理时,HTTPS 访问通常从 CONNECT 开始。浏览器请求代理为某个主机和端口建立隧道。如果 Squid 拒绝了该请求,网站的 TLS 会话就根本不会开始。

拒绝可以带有 HTTP 状态和响应内容。你可以脱离浏览器的错误页,用 curl 单独检查那个失败的 CONNECT 响应。这并不要求浏览器把所提供的 HTML 当作目标网页来呈现。浏览器可能丢弃 CONNECT 错误正文,改用自身的代理错误界面;具体呈现取决于客户端。

如果 Squid 的拒绝已经包含预期的 deny_info 正文,那么修改其文本、样式表或文件权限并不会改变浏览器处理的是哪个响应阶段。请保留拒绝状态和访问日志,以便确认 CONNECT 是否被拒绝以及原因。通用浏览器页面可能隐藏策略细节,而代理其实正确执行了规则。

在拦截的 HTTPS 连接内部提供拦截页是另一种架构,涉及 TLS 终止、客户端信任和证书处理。它不是通过修改 deny_info 来启用的,自定义模板也不赋予冒充被拦截站点的任何权限。仅在确有需要时才选择该设计;否则请使用客户端可用的错误报告和代理的运行日志。

相关文章