ICAP Client

This project aims at having a fully functional ICAP client immplementation within Squid, allowing Squid to seamlessly be extended with new functions such as content filtering, virus scanning, content adaptation etc without having to change Squid for each extension.

Contents


To-Do and Known issues

Only two of four vectoring points implemented
Only the respmod_precache and reqmod_postcache reqmod_precache vectoring points are implemented.
non-HTTP requests
Most vectoring points only work for HTTP requests, not ftp/gopher requests.
REQMOD parsing of modified request
The parsing of REQMOD modified request is still far from optimal. It is very sensitive to errors.
REQMOD Preview
ICAP preview support requires further testing and development.
Filter hop-by-hop header headers (4.4)
Hop-by-hop headers should not be sent to the ICAP server, and ICAP responses should not impact hop-by-hop properties other than by the nature of the response (i.e. if no content-length then HTTP/1.0 keep-alive can not be used)

Progress

2003-12-05 Bypass and X-Authenticated-User
Bypass feature implemented. Added X-Authenticated-User patch from Gaël Roualland.
2003-11-14 RESPMOD and fragmented response headers
RESPMOD does not deal proper with fragmented response headers (where all headers is not immediately available). Instead it sends the headers chunked to the ICAP server which it MUST NOT (8.2)
2003-10-29 REQMOD with message bodies
Squid now supports sending request entities (e.g., POST bodies) to the ICAP server.
2003-10-23 HTTP response to REQMOD
Squid once again accepts HTTP responses in REQMOD replies.
2003-10-15 Persistent Connections
Support for using persistent connections to the ICAP server.
2003-09-22 Stability improvements
Somewhat significant changes to the ICAP implementation. In particular, there are now fewer calls between ICAP functions and "http.c" and "client_side.c" functions. The reason is that those other modules are ill-equipped to handle ICAP and it is awkward to hack it in. The downside is that there is now more code duplication. The icap.c file has been split into icap_reqmod.c, icap_respmod.c, and icap_common.c. The REQMOD vectoring point has been changed from postcache to precache. All ICAP requests are now sent "streaming" to the ICAP server. That is, data is sent to the ICAP server as soon as it is available in Squid. Support for ICAP 204 (no content) responses.
2003-09-13 2.5 branch merge
Merged this branch with the latest 2.5 branch code. Only significant change to note was the removal of MemObject->fd.
2002-06-26 REQMOD and cache peers
REQMOD now works with cache peers.
2002-06-03 REQMOD uses full URL
REQMOD now sends the full URL in the forwarded request line. This eleminates the need to configure Squid for transparent proxying for REQMOD to function.
2002-05-09 Attempt at fixing REQMOD
The implementation of REQMOD has several issues in how it reads the modified request from the ICAP server. Not yet fully operational.
2002-04-07 Cosmetic cleanups
Some cosmetic cleanup to make the code look more like normal Squid code. (Prototype cleanups, removed the ICAP_FIELD macro)
2002-04-04 ICAP client 1.2.1 imported
The ICAP client 1.2.1 sources have been imported into the Squid developer CVS tree for continued development and updated to match Squid-2.5.STABLE3 developments

Stable releases

For a current release, download the diff or checkout the source from the anonymous CVS server using the icap-2_5 branch. Also look for tarballs to be periodically posted here.

The Old Squid ICAP Client, which you probably don't want to use, can be found at http://icap-server.sf.net/squid.html

Usage Instructions

Configure Squid:

./configure --enable-icap-support ...

Add ICAP configuration to squid.conf:

icap_enable on
icap_preview_enable off
icap_send_client_ip off
#icap_service s1 reqmod_precache 0 icap://172.16.43.39/reqmod
icap_service s1 respmod_precache 0 icap://172.16.43.39/respmod
icap_class c1 s1

acl HTTP proto HTTP
acl GET method GET
icap_access c1 allow HTTP GET

Offsite Documentation

Old Installation instructions
RFC 3507

Squid Now! Cache Now! Valid HTML 4.0! Bobby approved SourceForge
$Id: index.html,v 1.13 2004/04/05 17:40:30 dwsquid Exp $