将 ICAP HTML 响应服务接入 Squid 7
将现有的 ICAP 响应服务接入 Squid 7 正向代理,并确定它应转换哪些响应。
对于需要转换 HTML 响应的 Squid 正向代理,请使用适配路径。Squid 处理浏览器的代理请求;ICAP 响应服务执行正文转换并返回适配后的 HTTP 报文。
这使转换在请求生命周期中有了明确定位。响应头规则无法替代 HTML 解析器,独立的 Web 服务器过滤器也不会自动处理经过 Squid 的流量。
接入响应服务
对于支持 ICAP 的 Squid 7 构建和现有的兼容服务,配置形式如下:
acl adaptation_clients src 192.0.2.0/24
icap_enable on
icap_service html_editor respmod_precache bypass=0 icap://127.0.0.1:1344/modify
adaptation_access html_editor allow adaptation_clients
adaptation_access html_editor deny all
客户端范围和服务器 URI 只是示例。该 URI 必须指向真正实现响应转换的 ICAP 服务;仅声明 /modify 并不会创建这样的服务。该片段是对代理现有监听器和访问控制的补充。
respmod_precache 选择在缓存之前进行响应适配。adaptation_access 选择该服务适用的交易。bypass=0 设置意味着当适用交易遇到服务故障时,Squid 不能静默跳过该服务。请根据转换是否必需来选择这种故障行为。
适配指令因版本而异。特别是,这些配置参考列出了 Squid 7 及更早受支持版本中的 ICAP 服务与适配访问接口,并标明它们在 Squid 8 中不可用。请将该片段视为 Squid 7 的示例,而不要复制到任意版本中。
为服务设定精确的转换契约
明确哪些响应符合条件以及需要哪些修改。仅针对 HTML 的转换应保持图像、归档和无关媒体不变。该服务还必须处理它实际收到的表示形式:压缩正文、字符编码以及描述更改后正文的元数据。向任意响应字节中插入文本并不是通用的 HTML 转换。
当替换内容因用户而异时,请考虑缓存。如果生成的表示形式仅对一位读者有效,那么缓存前转换与共享缓存就是糟糕的组合。请保持可缓存性与转换策略一致,并遵守适用的 no-transform 指令。
最后,普通的 HTTPS CONNECT 隧道承载的是加密字节。它不会把 HTML 暴露给响应适配器。刻意管理的 TLS 检查方案需要其自身的兼容配置和客户端信任,解密后的响应才能进入这条路径。仅靠 ICAP 规则并不会带来这种可见性。