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