ICAP协议简介
一. ? ?ICAP協(xié)議簡介?
ICAP是Internet Content Adaptation Protocol的縮寫.它在本質(zhì)上是在HTTP message上執(zhí)?
行RPC遠程過程調(diào)用的一種輕量級的協(xié)議, 也就是說, 它讓ICAP Client可以把HTTP Message傳給ICAP Server, ?然后ICAP Server可以對其進行某種變換或者其他處理(“匹配”).被變換的message可以是HTTP請求也可以是HTTP應答. ?
? ? ICAP是和HTTP協(xié)議在結構和用法上都相似的請求/應答式的協(xié)議.雖然和HTTP協(xié)議類似,但它并不是HTTP,也并不是以HTTP協(xié)議為底層協(xié)議在其上實現(xiàn)的應用層協(xié)議, 也就是說, ICAP的message不能夠被HTTP代理所處理和轉(zhuǎn)發(fā). 實際上, 在ICAP協(xié)議剛被提出的時侯, 出于HTTP協(xié)議已被業(yè)界廣泛采用和利用在HTTP上的已有的大量投資, 是曾經(jīng)把它設計成HTTP上層的應用層協(xié)議的. 但是, 以HTTP為底層而實現(xiàn)的方案后來被證明是不可行的, 因為一些對于ICAP相當重要的特性無法在HTTP上面實現(xiàn).例如, ICAP Client可以在傳輸一個消息體的中間暫停并且等待一個”100 Continue”消息, 而HTTP Client只能在消息頭和消息體之間暫停等待, 另外, HTTP代理程序?qū)ttp message的一些變換是合法的和無害的, 而對于ICAP, 由于ICAP的”消息頭中又內(nèi)嵌有消息頭”的封裝機制和其他其他一些特性就將會引起問題.?
? ? Origin Server?
用戶所要獲得的資源所存儲在或者所被生成的Server, 例如xxxmail的box server就是一種Origin Server.?
? ? ICAP資源?
? ? 和HTTP資源相似, 但是其URI指定的是某個負責執(zhí)行HTTP message的變換的ICAP服務.?
ICAP server:?
? ?和一個HTTP server類似,但可通過ICAP請求應用程序服務.?
ICAP client:?
? ?建立和ICAP servers的連接并發(fā)送請求給它的程序.ICAP client經(jīng)常是(但不總是)為用戶服務的代理程序.?
? ? ICAP的兩種工作模式: ?
1) ? ?請求修改模式?
在”請求修改”(reqmod) 模式中, ICAP Client把HTTP request發(fā)送給ICAP Server, 然后ICAP SERVER可以做以下處理之一: ?
a. ? ?送回http request的一個修改后的版本, 然后ICAP Client把修改后的http request交給一個Origin Server去處理, 或者把修改后的request排隊送到另一個ICAP Server做進一步的修改;?
b. ? ?送回一個http response. 在錯誤發(fā)生需要給用戶有用的提示信息的時侯. 例如”你請求訪問一個你沒有權限訪問的網(wǎng)頁”. ?
c. ? ?返回一個錯誤.?
ICAP Client必須能夠處理以上所有這3種ICAP SERVER的response. 但是ICAP Client的實現(xiàn)在處理錯誤的時侯仍可具有靈活性, 對于ICAP Server返回的錯誤, 可以直接把錯誤返回給用戶, 或者再重新嘗試匹配變換過程(把http request交給ICAP Server修改的過程).?
在請求修改模式下的ICAP的典型的數(shù)據(jù)流程如下圖所示: ?
? ? origin-server?
? ? ? ? | /|\ ?
? ? ? ? | ?|?
? ? ?5 ?| ?| ?4?
? ? ? ? | ?|?
? ? ? ?\|/ | ? ? ? ? ? ? ?2?
? ? ICAP-client ? ?--------------> ? ICAP-resource ??
? ? (surrogate) ? ?<-------------- ? on ICAP-server?
? ? ? ? | /|\ ? ? ? ? ? ? 3?
? ? ? ? | ?|?
? ? ?6 ?| ?| ?1 ?
? ? ? ? | ?|?
? ? ? ?\|/ |?
? ? ? ?client?
1. 用戶client向支持ICAP的代理程序 (ICAP client)發(fā)送請求, 請求獲得在一個Origin Server上的一個對象(網(wǎng)頁,文件等等).?
2. 代理程序向ICAP server發(fā)送請求.?
3. ICAP server在收到的request 上面執(zhí)行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所生成的)發(fā)送給ICAP server, 然后ICAP server可以做以下之一: ?
a. ? ?回送response的一個修改后的版本.?
b. ? ?返回錯誤?
在應答修改模式下的ICAP的典型的數(shù)據(jù)流程如下圖所示: ?
? ?origin-server?
? ? ? ? | /|\?
? ? ? ? | ?|?
? ? ?3 ?| ?| ?2?
? ? ? ? | ?|?
? ? ? ?\|/ | ? ? ? ? ? ?4?
? ? ICAP-client ? ?--------------> ? ICAP-resource ??
? ? (surrogate) ? ?<-------------- ? on ICAP-server?
? ? ? ? | /|\ ? ? ? ? ? ?5?
? ? ? ? | ?|?
? ? ?6 ?| ?| ?1 ?
? ? ? ? | ?|?
? ? ? ?\|/ |?
? ? ? ?client?
1. 用戶client向支持ICAP的代理程序 (ICAP client)發(fā)送請求,請求獲得一個在Origin Server上的對象.?
2. 代理程序把request送給Origin Server.?
3. Origin Server對request作出應答.?
4. 支持ICAP的代理程序把Origin Server的應答發(fā)送ICAP server.?
5. ICAP server在Origin Server的應答的上面執(zhí)行ICAP資源的服務程序,然后把很可能修改過的應答送回給ICAP client.?
6. 代理程序把應答(很可能把Origin Server的應答修改過的)回送給用戶client.?
ICAP URI:?
ICAP Client可以在ICAP URI里面?zhèn)鬟f參數(shù)給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協(xié)議的應用?
由上面的介紹可看出, ICAP協(xié)議的實現(xiàn)(ICAP client和ICAP server)的作用就好像是在原?
來的client和Origin Server之間, 插入了一層透明的網(wǎng)關, 在原來的client和Origin Server之間傳輸數(shù)據(jù)的時侯可以調(diào)用Content Filter, 病毒掃描, 廣告插入,數(shù)據(jù)壓縮,語言翻譯等增值服務修改所傳輸?shù)臄?shù)據(jù), ?從而可達到在系統(tǒng)上實現(xiàn)這些增值服務, 并且對于原有的client和Origin Server是透明的, 即原有的client和Origin Server不用知道這些增值服務的存在, 好像仍然是client和Origin Server直接打交道一樣. ?
? ? ICAP協(xié)議還有以下好處: ?
1) ? ?它是一個開放的協(xié)議并且較易實現(xiàn), ?所以采用它來實現(xiàn)增值服務的提供會有較好的可擴展性, 也可以比較快地實現(xiàn).?
2) ? ?ICAP client可以與多個ICAP server一起工作, 所以可以比較容易地將增值服務的軟件程序(例如殺毒引擎)分布到多個server上, 實現(xiàn)負載平衡, 提高增值服務的可靠性和性能.?
3) ? ?可以把增值服務的實現(xiàn)完全outsource出去.?
4) ? ?提高Origin Server的數(shù)據(jù)內(nèi)容的可管理性, 安全和可控制性. ?
下表是實現(xiàn)各種增值服務所可以采用的ICAP的工作模式: ?
增值服務 ? ?請求修改模式 ? ?應答修改模式?
Content Filtering ? ? ? ? Yes ? ? ? ? Yes?
Gateway Translation ? ? ? ? Yes ? ? ? ? Yes?
Language Translation ? ? ? ? Yes ? ? ? ? Yes?
Virus Scanning ? ? ? ? ? ? Yes?
Ad Insertion ? ? ? ? Yes ? ? ? ? Yes?
Data Compression ? ? ? ? ? ? Yes?
ICAP協(xié)議沒有專門為某種增值服務所定義的部分, ?也就是說比如對于antivirus, 在協(xié)?
議中是找不到file is clean/ file affected and been cleaned/ file affected and been deleted 等所有和antivirus有關的具體細節(jié)的. 它只是在通訊協(xié)議和系統(tǒng)結構方面定義了一個便于在系統(tǒng)中透明地增加增值服務的協(xié)議結構. 所以我們的xxxmail系統(tǒng)除了antivirus, 在anti-spam等其他增值服務也可以采用ICAP來實現(xiàn)的. ?
對于我們的xxxmail系統(tǒng)來說, 以現(xiàn)在的antivirus的實現(xiàn)方式(把文件解到磁盤目錄里,?
然后用daemon程序自動掃描磁盤目錄并調(diào)用殺毒引擎)并不方便改用ICAP協(xié)議, 如果要改用ICAP協(xié)議則有可能是把box server當作Origin Server, ?把 webmail cgi/pop/imap程序當作client, ?實現(xiàn)ICAP client和ICAP server插在box server和webmail cgi/pop/imap中間, 由ICAP server去調(diào)用殺毒引擎. ?這種實現(xiàn)體系結構方面的改變是需要一定的工作量的. ?
四. ? ?采用ICAP協(xié)議時可采用的ICAP Server和ICAP Client Library?
對于自己沒有ICAP支持能力的增值服務程序, 如果我們要采用ICAP來實現(xiàn)把增值服務?
程序加入xxxmail系統(tǒng)架構中, 可采用Bell Labs Internet Service Engine (ISE): ?http://www.bell-labs.com/project/ISE/ ?作為ICAP Server, ? ?它提供和Apache API相似的service module API可用其來實現(xiàn)調(diào)用增值服務程序. ? 至于ICAP Client可采用Bell Labs ICAP Client Library: ?http://www.bell-labs.com/project/ICAP/ ?作為開發(fā)類庫來實現(xiàn). ? 不過Bell Labs Internet Service Engine和Bell Labs ICAP Client Library都只有l(wèi)inux平臺的binary且不提供源碼, ?無法在solaris上用. ? 至于Open Source的我只找到一個: ?http://sourceforge.net/projects/icap-server ?, ?是用python開發(fā)的
ICAP是Internet Content Adaptation Protocol的縮寫.它在本質(zhì)上是在HTTP message上執(zhí)?
行RPC遠程過程調(diào)用的一種輕量級的協(xié)議, 也就是說, 它讓ICAP Client可以把HTTP Message傳給ICAP Server, ?然后ICAP Server可以對其進行某種變換或者其他處理(“匹配”).被變換的message可以是HTTP請求也可以是HTTP應答. ?
? ? ICAP是和HTTP協(xié)議在結構和用法上都相似的請求/應答式的協(xié)議.雖然和HTTP協(xié)議類似,但它并不是HTTP,也并不是以HTTP協(xié)議為底層協(xié)議在其上實現(xiàn)的應用層協(xié)議, 也就是說, ICAP的message不能夠被HTTP代理所處理和轉(zhuǎn)發(fā). 實際上, 在ICAP協(xié)議剛被提出的時侯, 出于HTTP協(xié)議已被業(yè)界廣泛采用和利用在HTTP上的已有的大量投資, 是曾經(jīng)把它設計成HTTP上層的應用層協(xié)議的. 但是, 以HTTP為底層而實現(xiàn)的方案后來被證明是不可行的, 因為一些對于ICAP相當重要的特性無法在HTTP上面實現(xiàn).例如, ICAP Client可以在傳輸一個消息體的中間暫停并且等待一個”100 Continue”消息, 而HTTP Client只能在消息頭和消息體之間暫停等待, 另外, HTTP代理程序?qū)ttp message的一些變換是合法的和無害的, 而對于ICAP, 由于ICAP的”消息頭中又內(nèi)嵌有消息頭”的封裝機制和其他其他一些特性就將會引起問題.?
? ? Origin Server?
用戶所要獲得的資源所存儲在或者所被生成的Server, 例如xxxmail的box server就是一種Origin Server.?
? ? ICAP資源?
? ? 和HTTP資源相似, 但是其URI指定的是某個負責執(zhí)行HTTP message的變換的ICAP服務.?
ICAP server:?
? ?和一個HTTP server類似,但可通過ICAP請求應用程序服務.?
ICAP client:?
? ?建立和ICAP servers的連接并發(fā)送請求給它的程序.ICAP client經(jīng)常是(但不總是)為用戶服務的代理程序.?
? ? ICAP的兩種工作模式: ?
1) ? ?請求修改模式?
在”請求修改”(reqmod) 模式中, ICAP Client把HTTP request發(fā)送給ICAP Server, 然后ICAP SERVER可以做以下處理之一: ?
a. ? ?送回http request的一個修改后的版本, 然后ICAP Client把修改后的http request交給一個Origin Server去處理, 或者把修改后的request排隊送到另一個ICAP Server做進一步的修改;?
b. ? ?送回一個http response. 在錯誤發(fā)生需要給用戶有用的提示信息的時侯. 例如”你請求訪問一個你沒有權限訪問的網(wǎng)頁”. ?
c. ? ?返回一個錯誤.?
ICAP Client必須能夠處理以上所有這3種ICAP SERVER的response. 但是ICAP Client的實現(xiàn)在處理錯誤的時侯仍可具有靈活性, 對于ICAP Server返回的錯誤, 可以直接把錯誤返回給用戶, 或者再重新嘗試匹配變換過程(把http request交給ICAP Server修改的過程).?
在請求修改模式下的ICAP的典型的數(shù)據(jù)流程如下圖所示: ?
? ? origin-server?
? ? ? ? | /|\ ?
? ? ? ? | ?|?
? ? ?5 ?| ?| ?4?
? ? ? ? | ?|?
? ? ? ?\|/ | ? ? ? ? ? ? ?2?
? ? ICAP-client ? ?--------------> ? ICAP-resource ??
? ? (surrogate) ? ?<-------------- ? on ICAP-server?
? ? ? ? | /|\ ? ? ? ? ? ? 3?
? ? ? ? | ?|?
? ? ?6 ?| ?| ?1 ?
? ? ? ? | ?|?
? ? ? ?\|/ |?
? ? ? ?client?
1. 用戶client向支持ICAP的代理程序 (ICAP client)發(fā)送請求, 請求獲得在一個Origin Server上的一個對象(網(wǎng)頁,文件等等).?
2. 代理程序向ICAP server發(fā)送請求.?
3. ICAP server在收到的request 上面執(zhí)行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所生成的)發(fā)送給ICAP server, 然后ICAP server可以做以下之一: ?
a. ? ?回送response的一個修改后的版本.?
b. ? ?返回錯誤?
在應答修改模式下的ICAP的典型的數(shù)據(jù)流程如下圖所示: ?
? ?origin-server?
? ? ? ? | /|\?
? ? ? ? | ?|?
? ? ?3 ?| ?| ?2?
? ? ? ? | ?|?
? ? ? ?\|/ | ? ? ? ? ? ?4?
? ? ICAP-client ? ?--------------> ? ICAP-resource ??
? ? (surrogate) ? ?<-------------- ? on ICAP-server?
? ? ? ? | /|\ ? ? ? ? ? ?5?
? ? ? ? | ?|?
? ? ?6 ?| ?| ?1 ?
? ? ? ? | ?|?
? ? ? ?\|/ |?
? ? ? ?client?
1. 用戶client向支持ICAP的代理程序 (ICAP client)發(fā)送請求,請求獲得一個在Origin Server上的對象.?
2. 代理程序把request送給Origin Server.?
3. Origin Server對request作出應答.?
4. 支持ICAP的代理程序把Origin Server的應答發(fā)送ICAP server.?
5. ICAP server在Origin Server的應答的上面執(zhí)行ICAP資源的服務程序,然后把很可能修改過的應答送回給ICAP client.?
6. 代理程序把應答(很可能把Origin Server的應答修改過的)回送給用戶client.?
ICAP URI:?
ICAP Client可以在ICAP URI里面?zhèn)鬟f參數(shù)給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協(xié)議的應用?
由上面的介紹可看出, ICAP協(xié)議的實現(xiàn)(ICAP client和ICAP server)的作用就好像是在原?
來的client和Origin Server之間, 插入了一層透明的網(wǎng)關, 在原來的client和Origin Server之間傳輸數(shù)據(jù)的時侯可以調(diào)用Content Filter, 病毒掃描, 廣告插入,數(shù)據(jù)壓縮,語言翻譯等增值服務修改所傳輸?shù)臄?shù)據(jù), ?從而可達到在系統(tǒng)上實現(xiàn)這些增值服務, 并且對于原有的client和Origin Server是透明的, 即原有的client和Origin Server不用知道這些增值服務的存在, 好像仍然是client和Origin Server直接打交道一樣. ?
? ? ICAP協(xié)議還有以下好處: ?
1) ? ?它是一個開放的協(xié)議并且較易實現(xiàn), ?所以采用它來實現(xiàn)增值服務的提供會有較好的可擴展性, 也可以比較快地實現(xiàn).?
2) ? ?ICAP client可以與多個ICAP server一起工作, 所以可以比較容易地將增值服務的軟件程序(例如殺毒引擎)分布到多個server上, 實現(xiàn)負載平衡, 提高增值服務的可靠性和性能.?
3) ? ?可以把增值服務的實現(xiàn)完全outsource出去.?
4) ? ?提高Origin Server的數(shù)據(jù)內(nèi)容的可管理性, 安全和可控制性. ?
下表是實現(xiàn)各種增值服務所可以采用的ICAP的工作模式: ?
增值服務 ? ?請求修改模式 ? ?應答修改模式?
Content Filtering ? ? ? ? Yes ? ? ? ? Yes?
Gateway Translation ? ? ? ? Yes ? ? ? ? Yes?
Language Translation ? ? ? ? Yes ? ? ? ? Yes?
Virus Scanning ? ? ? ? ? ? Yes?
Ad Insertion ? ? ? ? Yes ? ? ? ? Yes?
Data Compression ? ? ? ? ? ? Yes?
ICAP協(xié)議沒有專門為某種增值服務所定義的部分, ?也就是說比如對于antivirus, 在協(xié)?
議中是找不到file is clean/ file affected and been cleaned/ file affected and been deleted 等所有和antivirus有關的具體細節(jié)的. 它只是在通訊協(xié)議和系統(tǒng)結構方面定義了一個便于在系統(tǒng)中透明地增加增值服務的協(xié)議結構. 所以我們的xxxmail系統(tǒng)除了antivirus, 在anti-spam等其他增值服務也可以采用ICAP來實現(xiàn)的. ?
對于我們的xxxmail系統(tǒng)來說, 以現(xiàn)在的antivirus的實現(xiàn)方式(把文件解到磁盤目錄里,?
然后用daemon程序自動掃描磁盤目錄并調(diào)用殺毒引擎)并不方便改用ICAP協(xié)議, 如果要改用ICAP協(xié)議則有可能是把box server當作Origin Server, ?把 webmail cgi/pop/imap程序當作client, ?實現(xiàn)ICAP client和ICAP server插在box server和webmail cgi/pop/imap中間, 由ICAP server去調(diào)用殺毒引擎. ?這種實現(xiàn)體系結構方面的改變是需要一定的工作量的. ?
四. ? ?采用ICAP協(xié)議時可采用的ICAP Server和ICAP Client Library?
對于自己沒有ICAP支持能力的增值服務程序, 如果我們要采用ICAP來實現(xiàn)把增值服務?
程序加入xxxmail系統(tǒng)架構中, 可采用Bell Labs Internet Service Engine (ISE): ?http://www.bell-labs.com/project/ISE/ ?作為ICAP Server, ? ?它提供和Apache API相似的service module API可用其來實現(xiàn)調(diào)用增值服務程序. ? 至于ICAP Client可采用Bell Labs ICAP Client Library: ?http://www.bell-labs.com/project/ICAP/ ?作為開發(fā)類庫來實現(xiàn). ? 不過Bell Labs Internet Service Engine和Bell Labs ICAP Client Library都只有l(wèi)inux平臺的binary且不提供源碼, ?無法在solaris上用. ? 至于Open Source的我只找到一個: ?http://sourceforge.net/projects/icap-server ?, ?是用python開發(fā)的
總結
- 上一篇: HSI、HSV、RGB、CMYK、HSL
- 下一篇: 拥有ISO26262认证的软件工具清单