为什么浏览器可能不显示 Squid 的 HTTPS 拦截页
了解为什么浏览器可能显示自身的隧道错误,而不是为被拒绝的 CONNECT 请求返回的自定义 HTML。
代理的自定义拦截页对 HTTP 站点会正常出现。而对于 HTTPS 站点,浏览器反而显示隧道错误。再次替换 HTML 模板可能毫无作用。
使用显式 HTTP 代理时,HTTPS 访问通常从 CONNECT 开始。浏览器请求代理为某个主机和端口建立隧道。如果 Squid 拒绝了该请求,网站的 TLS 会话就根本不会开始。
拒绝可以带有 HTTP 状态和响应内容。你可以脱离浏览器的错误页,用 curl 单独检查那个失败的 CONNECT 响应。这并不要求浏览器把所提供的 HTML 当作目标网页来呈现。浏览器可能丢弃 CONNECT 错误正文,改用自身的代理错误界面;具体呈现取决于客户端。
如果 Squid 的拒绝已经包含预期的 deny_info 正文,那么修改其文本、样式表或文件权限并不会改变浏览器处理的是哪个响应阶段。请保留拒绝状态和访问日志,以便确认 CONNECT 是否被拒绝以及原因。通用浏览器页面可能隐藏策略细节,而代理其实正确执行了规则。
在拦截的 HTTPS 连接内部提供拦截页是另一种架构,涉及 TLS 终止、客户端信任和证书处理。它不是通过修改 deny_info 来启用的,自定义模板也不赋予冒充被拦截站点的任何权限。仅在确有需要时才选择该设计;否则请使用客户端可用的错误报告和代理的运行日志。