🔗 功能:ICAP (Internet Content Adaptation Protocol)
- 状态:已完成
- 版本: 3.0
- 开发者:AlexRousskov
🔗 背景
Internet Content Adaptation Protocol (RFC 3507, subject to errata) 规定了 HTTP 代理(ICAP 客户端)如何将内容适配委托给外部 ICAP 服务器。包括 Squid 在内的大多数流行代理都支持 ICAP。如果您的适配算法驻留在 ICAP 服务器中,它将能够在各种环境中工作,并且不依赖于单一的代理项目或供应商。使用 ICAP 进行大多数内容适配不需要修改代理代码。
- 优点:代理无关、专注于适配的 API、无需修改 Squid、支持远程适配服务器、可扩展。
- 缺点:通信延迟、协议功能限制、需要独立的 ICAP 服务器进程或设备。
一个代理可以访问多个 ICAP 服务器,一个 ICAP 服务器也可以被多个代理访问。ICAP 服务器可以驻留在与 Squid 相同的物理机上,也可以运行在远程主机上。根据配置和上下文,某些 ICAP 故障可以被绕过,从而对代理最终用户不可见。
🔗 ICAP 服务器
虽然从头开始编写另一个 ICAP 服务器总是可能的,但以下 ICAP 服务器可以进行修改以支持您需要的适配。一些 ICAP 服务器甚至接受自定义适配模块或插件。
- C-ICAP (C)
- Traffic Spicer (C++)
- ICAP-Server (Python)
- POESIA (Java)
- GreasySpoon (Java and Javascript)
- Network Appliance 提供的 参考实现。
以上列表并非详尽无遗,也不代表认可。任何 ICAP 服务器在您的适配项目上下文中都将具有独特的优缺点。
有关 ICAP 的更多信息可在 ICAP 论坛上找到。
🔗 Squid 详细信息
Squid-3.0 及更高版本内置了 ICAP 支持。支持预缓存的 REQMOD 和 RESPMOD 向量点,包括请求满足。Squid-2 通过一套维护不善且非常不稳定的补丁支持有限的 ICAP。值得注意的是,Squid 开发人员不再正式支持 Squid-2 的 ICAP 工作。
Squid 支持接收来自 ICAP 服务器的 204(无修改)响应。这通常在服务器希望不对 HTTP 消息进行任何修改时使用。通过防止服务器将收到的 HTTP 消息发回 Squid,可以节省带宽。但在两种情况下,Squid 将不接受 204 响应:
- 有效载荷大小大于 64KB。
- 有效载荷的大小无法(轻松)确定。
原因很简单:如果服务器要向 Squid 响应 204,Squid 需要在内存中保留原始 HTTP 消息的副本。这两个基本要求是为了限制 Squid 在支持 204 时的内存使用而进行的基本优化。
🔗 Squid 配置
ICAP 服务器的配置应在服务器文档中有详细说明。Squid 预计会支持其中任何一个。
Squid-3 的配置在 Squid-3.0 和 Squid-3.1 之间发生了变化。
🔗 Squid 3.1
以下示例指示 Squid-3.1 与两个 ICAP 服务通信,一个用于请求适配,一个用于响应适配。
icap_enable on
icap_service service_req reqmod_precache bypass=1 icap://127.0.0.1:1344/request
adaptation_access service_req allow all
icap_service service_resp respmod_precache bypass=0 icap://127.0.0.1:1344/response
adaptation_access service_resp allow all
- adaptation_access
- adaptation_service_set
- icap_client_username_encode
- icap_client_username_header
- icap_connect_timeout
- icap_default_options_ttl
- icap_enable
- icap_io_timeout
- icap_persistent_connections
- icap_preview_enable
- icap_preview_size
- icap_send_client_ip
- icap_send_client_username
- icap_service
- icap_service_failure_limit
- icap_service_revival_delay
🔗 Squid 3.0
以下示例指示 Squid-3.0 与两个 ICAP 服务通信,一个用于请求适配,一个用于响应适配。
icap_enable on
icap_service service_req reqmod_precache 1 icap://127.0.0.1:1344/request
icap_class class_req service_req
icap_access class_req allow all
icap_service service_resp respmod_precache 0 icap://127.0.0.1:1344/response
icap_class class_resp service_resp
icap_access class_resp allow all
还有其他选项可以控制 ICAP 的各种方面。
- icap_access
- icap_class
- icap_client_username_encode
- icap_client_username_header
- icap_connect_timeout
- icap_default_options_ttl
- icap_enable
- icap_io_timeout
- icap_persistent_connections
- icap_preview_enable
- icap_preview_size
- icap_send_client_ip
- icap_send_client_username
- icap_service
- icap_service_failure_limit
- icap_service_revival_delay
类别:功能
导航:站点搜索,站点页面,类别,🔼 向上