一. ICAP协议简介
ICAP是Internet Content Adaptation Protocol的缩写.它在本质上是在HTTP message上执
行RPC远程过程调用的一种轻量级的协议, 也就是说, 它让ICAP Client可以把HTTP Message传给ICAP Server, 然后ICAP Server可以对其进行某种变换或者其他处理(“匹配”).被变换的message可以是HTTP请求也可以是HTTP应答.
ICAP是和HTTP协议在结构和用法上都相似的请求/应答式的协议.虽然和HTTP协议类似,但它并不是HTTP,也并不是以HTTP协议为底层协议在其上实现的应用层协议, 也就是说, ICAP的message不能够被HTTP代理所处理和转发. 实际上, 在ICAP协议刚被提出的时侯, 出于HTTP协议已被业界广泛采用和利用在HTTP上的已有的大量投资, 是曾经把它设计成HTTP上层的应用层协议的. 但是, 以HTTP为底层而实现的方案后来被证明是不可行的, 因为一些对于ICAP相当重要的特性无法在HTTP上面实现.例如, ICAP Client可以在传输一个消息体的中间暂停并且等待一个”100 Continue”消息, 而HTTP Client只能在消息头和消息体之间暂停等待, 另外, HTTP代理程序对Http message的一些变换是合法的和无害的, 而对于ICAP, 由于ICAP的”消息头中又内嵌有消息头”的封装机制和其他其他一些特性就将会引起问题.
Origin Server
用户所要获得的资源所存储在或者所被生成的Server, 例如xxxmail的box server就是一种Origin Server.
ICAP资源
和HTTP资源相似, 但是其URI指定的是某个负责执行HTTP message的变换的ICAP服务.
ICAP server:
和一个HTTP server类似,但可通过ICAP请求应用程序服务.
ICAP client:
建立和ICAP servers的连接并发送请求给它的程序.ICAP client经常是(但不总是)为用户服务的代理程序.
ICAP的两种工作模式:
1) 请求修改模式
在”请求修改”(reqmod) 模式中, ICAP Client把HTTP request发送给ICAP Server, 然后ICAP SERVER可以做以下处理之一:
a. 送回http request的一个修改后的版本, 然后ICAP Client把修改后的http request交给一个Origin Server去处理, 或者把修改后的request排队送到另一个ICAP Server做进一步的修改;
b. 送回一个http response. 在错误发生需要给用户有用的提示信息的时侯. 例如”你请求访问一个你没有权限访问的网页”.
c. 返回一个错误.
ICAP Client 必须能够处理以上所有这3种ICAP SERVER的response. 但是ICAP Client的实现在处理错误的时侯仍可具有灵活性, 对于 ICAP Server返回的错误, 可以直接把错误返回给用户, 或者再重新尝试匹配变换过程(把http request交给ICAP Server 修改的过程).
在请求修改模式下的ICAP的典型的数据流程如下图所示:
origin-server
| /|\
| |
5 | | 4
| |
\|/ | 2
ICAP-client --------------> ICAP-resource
(surrogate) <-------------- on ICAP-server
| /|\ 3
| |
6 | | 1
| |
\|/ |
client
1. 用户client向支持ICAP的代理程序 (ICAP client)发送请求, 请求获得在一个Origin Server上的一个对象(网页,文件等等).
2. 代理程序向ICAP server发送请求.
3. ICAP server在收到的request 上面执行ICAP 资源的服务程序,然后送回很可能修改过的 request, 或者是对该request的response给ICAP client.
如果步骤3 送回了request的话:
4. 代理程序把ICAP Server送回的request(很可能和用户client的原来的request不同了的)送给Origin Server.
5. Origin Server对request作处理并把应答给代理程序.
6. 代理程序把应答 (从ICAP server回送的或者是Origin Server回送的) 回送给用户client.
2) 应答修改模式
在”应答修改”(respmod)模式中,ICAP client把HTTP response(Origin Server所生成的)发送给ICAP server, 然后ICAP server可以做以下之一:
a. 回送response的一个修改后的版本.
b. 返回错误
在应答修改模式下的ICAP的典型的数据流程如下图所示:
origin-server
| /|\
| |
3 | | 2
| |
\|/ | 4
ICAP-client --------------> ICAP-resource
(surrogate) <-------------- on ICAP-server
| /|\ 5
| |
6 | | 1
| |
\|/ |
client
1. 用户client向支持ICAP的代理程序 (ICAP client)发送请求,请求获得一个在Origin Server上的对象.
2. 代理程序把request送给Origin Server.
3. Origin Server对request作出应答.
4. 支持ICAP的代理程序把Origin Server的应答发送ICAP server.
5. ICAP server在Origin Server的应答的上面执行ICAP资源的服务程序,然后把很可能修改过的应答送回给ICAP client.
6. 代理程序把应答(很可能把Origin Server的应答修改过的)回送给用户client.
ICAP URI:
ICAP Client可以在ICAP URI里面传递参数给ICAP服务程序.ICAP URI的格式例子:
icap://icap.example.net:2000/services/antivirus
icap://icap.net/service?mode=translate&lang=french
二. ICAP的请求/应答的例子
1. 请求修改模式
ICAP Request如下所示:
REQMOD icap://icap-server.net/server?arg=87 ICAP/1.0
Host: icap-server.net
Encapsulated: req-hdr=0, null-body=170
GET / HTTP/1.1
Host: www.origin-server.com
Accept: text/html, text/plain
Accept-Encoding: compress
Cookie: ff39fk3jur@4ii0e02i
If-None-Match: "xyzzy", "r2d2xxxx"
ICAP Response如下所示:
ICAP/1.0 200 OK
Date: Mon, 10 Jan 2000 09:55:21 GMT
Server: ICAP-Server-Software/1.0
Connection: close
ISTag: "W3E4R7U9-L2E4-2"
Encapsulated: req-hdr=0, null-body=231
GET /modified-path HTTP/1.1
Host: www.origin-server.com
Via: 1.0 icap-server.net (ICAP Example ReqMod Service 1.1)
Accept: text/html, text/plain, image/gif
Accept-Encoding: gzip, compress
If-None-Match: "xyzzy", "r2d2xxxx"
第2个例子和上面相似, 但request是以”POST”方式提交而不是以”GET”方式提交:
ICAP Request:
REQMOD icap://icap-server.net/server?arg=87 ICAP/1.0
Host: icap-server.net
Encapsulated: req-hdr=0, req-body=147
POST /origin-resource/form.pl HTTP/1.1
Host: www.origin-server.com
Accept: text/html, text/plain
Accept-Encoding: compress
Pragma: no-cache
1e
I am posting this information.
0
ICAP Response:
ICAP/1.0 200 OK
Date: Mon, 10 Jan 2000 09:55:21 GMT
Server: ICAP-Server-Software/1.0
Connection: close
ISTag: "W3E4R7U9-L2E4-2"
Encapsulated: req-hdr=0, req-body=244
POST /origin-resource/form.pl HTTP/1.1
Host: www.origin-server.com
Via: 1.0 icap-server.net (ICAP Example ReqMod Service 1.1)
Accept: text/html, text/plain, image/gif
Accept-Encoding: gzip, compress
Pragma: no-cache
Content-Length: 45
2d
I am posting this information. ICAP powered!
0
2. 应答修改模式
RESPMOD icap://icap.example.org/satisf ICAP/1.0
Host: icap.example.org
Encapsulated: req-hdr=0, res-hdr=137, res-body=296
GET /origin-resource HTTP/1.1
Host: www.origin-server.com
Accept: text/html, text/plain, image/gif
Accept-Encoding: gzip, compress
HTTP/1.1 200 OK
Date: Mon, 10 Jan 2000 09:52:22 GMT
Server: Apache/1.3.6 (Unix)
ETag: "63840-1ab7-378d415b"
Content-Type: text/html
Content-Length: 51
33
This is data that was returned by an origin server.
0
ICAP Response:
ICAP/1.0 200 OK
Date: Mon, 10 Jan 2000 09:55:21 GMT
Server: ICAP-Server-Software/1.0
Connection: close
ISTag: "W3E4R7U9-L2E4-2"
Encapsulated: res-hdr=0, res-body=222
HTTP/1.1 200 OK
Date: Mon, 10 Jan 2000 09:55:21 GMT
Via: 1.0 icap.example.org (ICAP Example RespMod Service 1.1)
Server: Apache/1.3.6 (Unix)
ETag: "63840-1ab7-378d415b"
Content-Type: text/html
Content-Length: 92
5c
This is data that was returned by an origin server, but with
value added by an ICAP server.
0
三. ICAP协议的应用
由上面的介绍可看出, ICAP协议的实现(ICAP client和ICAP server)的作用就好像是在原
来的client和Origin Server之间, 插入了一层透明的网关, 在原来的client和Origin Server之间传输数据的时侯可以调用Content Filter, 病毒扫描, 广告插入,数据压缩,语言翻译等增值服务修改所传输的数据, 从而可达到在系统上实现这些增值服务, 并且对于原有的client和Origin Server是透明的, 即原有的client和Origin Server不用知道这些增值服务的存在, 好像仍然是client和Origin Server直接打交道一样.
ICAP协议还有以下好处:
1) 它是一个开放的协议并且较易实现, 所以采用它来实现增值服务的提供会有较好的可扩展性, 也可以比较快地实现.
2) ICAP client可以与多个ICAP server一起工作, 所以可以比较容易地将增值服务的软件程序(例如杀毒引擎)分布到多个server上, 实现负载平衡, 提高增值服务的可靠性和性能.
3) 可以把增值服务的实现完全outsource出去.
4) 提高Origin Server的数据内容的可管理性, 安全和可控制性.
下表是实现各种增值服务所可以采用的ICAP的工作模式:
增值服务 请求修改模式 应答修改模式
Content Filtering Yes Yes
Gateway Translation Yes Yes
Language Translation Yes Yes
Virus Scanning Yes
Ad Insertion Yes Yes
Data Compression Yes
ICAP协议没有专门为某种增值服务所定义的部分, 也就是说比如对于antivirus, 在协
议中是找不到file is clean/ file affected and been cleaned/ file affected and been deleted 等所有和antivirus有关的具体细节的. 它只是在通讯协议和系统结构方面定义了一个便于在系统中透明地增加增值服务的协议结构. 所以我们的xxxmail系统除了antivirus, 在anti-spam等其他增值服务也可以采用ICAP来实现的.
对于我们的xxxmail系统来说, 以现在的antivirus的实现方式(把文件解到磁盘目录里,
然后用daemon程序自动扫描磁盘目录并调用杀毒引擎)并不方便改用ICAP协议, 如果要改用ICAP协议则有可能是把box server当作Origin Server, 把 webmail cgi/pop/imap程序当作client, 实现 ICAP client和ICAP server插在box server和webmail cgi/pop/imap中间, 由ICAP server 去调用杀毒引擎. 这种实现体系结构方面的改变是需要一定的工作量的.
四. 采用ICAP协议时可采用的ICAP Server和ICAP Client Library
对于自己没有ICAP支持能力的增值服务程序, 如果我们要采用ICAP来实现把增值服务
程序加入xxxmail系统架构中, 可采用Bell Labs Internet Service Engine (ISE): http: //www.bell-labs.com/project/ISE/ 作为ICAP Server, 它提供和Apache API相似的 service module API可用其来实现调用增值服务程序. 至于ICAP Client可采用 Bell Labs ICAP Client Library: http://www.bell-labs.com/project/ICAP/ 作为开发类库来实现. 不过Bell Labs Internet Service Engine和 Bell Labs ICAP Client Library都只有linux平台的binary且不提供源码, 无法在solaris上用. 至于Open Source的我只找到一个: http://sourceforge.net/projects/icap-server , 是用 python开发的.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/esinzhong/archive/2007/04/11/1560276.aspx
分享到:
相关推荐
ICAP(Internet Content Adaptation Protocol,互联网内容适配协议)是一种用于HTTP服务...RFC3507作为ICAP的参考文档,详细地介绍了ICAP协议的各个组成部分和操作流程,为理解和实现ICAP协议提供了丰富的信息和指导。
而Squid与ICAP(Internet Content Adaptation Protocol)的结合,则可以实现更高级的功能,如内容过滤、病毒检测等。 一、Linux搭建Squid透明代理 1. 安装Squid 在大多数Linux发行版中,可以通过包管理器安装Squid...
控制器模块处理ICAP协议,而寄存器则存储配置相关的状态信息。 在Kintex-7 FPGA中,ICAP原语的使用步骤大致如下: 1. **设计ICAP控制器**:首先,需要设计一个ICAP控制器模块,该模块需要遵循Xilinx的ICAP协议规范...
1. **普通ICAP (ICAP-over-UDP)**:标准的ICAP协议是基于无连接的UDP协议,这允许快速响应但可能丢失数据包。在普通ICAP中,服务器和客户端通过ICAP报文交换信息,处理文件扫描请求。 2. **Secure ICAP (ICAP-over-...
**ICAP协议** ICAP是一种应用层协议,由IETF定义,用于在HTTP传输过程中添加或修改数据。通过这个协议,代理服务器能够将请求或响应发送到ICAP服务器进行进一步处理,比如病毒扫描、广告过滤、内容转换等。ICAP协议...
该模块用纯C语言编写,并使用C-ICAP库处理ICAP协议。 什么是ICAP客户? ICAP是定义的协议。 适用于ICAP规范,并且有一份有关RFC草案。 它是一种客户端-服务器协议,主要用于进行病毒扫描和内容重写。 例如,ICAP...
McAfee Data Loss Prevention (DLP) Prevent可以通过与使用简易邮件传输协议(SMTP)的邮件传输代理(MTA)网关或兼容ICAP协议的web代理集成,来针对经电子邮件、网络邮件、IM、WiKi、博客、门户、HTTP/HTTPS和FTP流出...
总的来说,`SP605_ID回读处理`是Xilinx S6系列芯片开发中的一个核心技术点,它依赖于ICAP协议来读取并验证FPGA的IDCODE,以确保正确配置和识别。通过对这一过程的深入理解和实践,开发者可以更好地掌握FPGA的配置...
Linux 2.4 内核中的 FPGA ICAP 驱动程序详解 FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,...开发者需要熟悉内核驱动编程、FPGA 工作原理以及 ICAP 接口协议,才能有效地开发和维护此类驱动程序。
在IT行业中,Buffer ICAP(Intermediate Configuration Access Protocol)是一种用于FPGA(Field-Programmable Gate Array)配置的协议。本文将深入探讨Buffer ICAP在加载部分位流到系统内存中的作用,以及与之相关...
scapy 的 ICAP/1.0 协议实现(从 invernizzi 的 scapy-http 复制代码) 用法 [root@user ~]$ scapy WARNING: No route found for IPv6 destination :: (no default route?) Welcome to Scapy (2.2.0-dev) >>> ...
在Verilog中,我们需要定义一个ICAP控制器,它根据控制模块的指令,通过ICAP接口读取内存中的配置数据并加载到FPGA。 五、安全与稳定性考虑 在实际应用中,考虑到安全性和稳定性,Multiboot功能应具备错误检测和...
- **ICAP 服务**:通过 ICAP 协议,Squid 可以与其他内容过滤或转换服务集成。 - **ECAP 插件**:扩展 Squid 功能,如内容压缩、广告过滤等。 - **HTTP 缓存协商**:与服务器协商返回最适合的缓存内容版本。 ### 5....
在本文中,我们将深入探讨如何在Xilinx Artix-7系列的xc7a100tffg484-2 FPGA芯片上利用ICAP(内部配置访问协议)原语来实现SPI(串行外围接口)Multiboot加载。Multiboot功能允许设备在启动时选择不同的固件或配置,...
它具有一个Python ICAP(Internet内容适配协议)服务器和IRML解析器。 使用此功能,Web代理可以在将内容交付给客户端之前对内容进行基于规则的调整。 也具有Python proxylet API和squid-icap-client代码。
其中,“ICAP”通常指的是Internet Content Adaptation Protocol,这是一种标准协议,用于在网络中实现内容转换和服务。在容器环境中,ICAP可能用于实现诸如恶意软件扫描、内容过滤等安全功能。 在这个项目中,`tf-...