Announce: ICAP server library

747 views
Skip to first unread message

andyb...@gmail.com

unread,
Jul 7, 2011, 4:35:50 PM7/7/11
to golan...@googlegroups.com
I'm developing an ICAP server package in Go. It has a similar interface to the http package in the standard library. It is hosted at http://code.google.com/p/go-icap/

(ICAP, the Internet Content Adaptation Protocol, is basically a plugin architecture for proxies like Squid. The proxy sends HTTP messages to the ICAP server, which can modify them. The proxy then uses the modified message instead of the original. http://en.wikipedia.org/wiki/Internet_Content_Adaptation_Protocol)

Andy

a.ku...@tomorrow-focus.de

unread,
Aug 20, 2013, 7:28:20 AM8/20/13
to golan...@googlegroups.com
Hi Andy, 
would you consider the package ready for production use?

Andy Balholm

unread,
Aug 21, 2013, 12:19:23 PM8/21/13
to a.ku...@tomorrow-focus.de, golan...@googlegroups.com

On Aug 20, 2013, at 4:28 AM, a.ku...@tomorrow-focus.de wrote:

> Hi Andy,
> would you consider the package ready for production use?

Yes. I'm using it in production.

We have it deployed to about 100 machines at end-user locations.

a.ku...@tomorrow-focus.de

unread,
Aug 21, 2013, 1:20:31 PM8/21/13
to golan...@googlegroups.com, a.ku...@tomorrow-focus.de
Great! It will take some time to dig into the source before I can run tests, so another question: have you run tests to determine how the library runs under high load?
Cheers,
Arian

Andy Balholm

unread,
Aug 21, 2013, 2:00:11 PM8/21/13
to a.ku...@tomorrow-focus.de, golan...@googlegroups.com

On Aug 21, 2013, at 10:20 AM, a.ku...@tomorrow-focus.de wrote:

> Great! It will take some time to dig into the source before I can run tests, so another question: have you run tests to determine how the library runs under high load?

Not really. I think our largest deployment serves about 50 simultaneous users.

But the design is very similar to the net/http package, so its performance characteristics should be similar.

jveri...@gmail.com

unread,
Jan 26, 2015, 6:08:46 AM1/26/15
to golan...@googlegroups.com

Hello,

I want to create a na icap server like the "quintolabs" just want to check the url in files blacklist and look for bad words in the url and content.

I use squid and its a good proxy server, just want to check if the page is going to be served or be redirected to a block HTML page.

 

Is you library a good start point?

 

thank you

Andy Balholm

unread,
Jan 27, 2015, 11:50:38 AM1/27/15
to jveri...@gmail.com, golan...@googlegroups.com
Yes, I think that my go-icap library would work for you.

But I should warn you that I’m not using it myself any more, so it hasn’t received much maintenance in the past 2 years. I switched from ICAP to running my own HTTP proxy. 

What you’re wanting to do sounds a lot like what I’m doing. You might want to check out my filtering program at code.google.com/p/redwood-filter.

João Veríssimo

unread,
Jan 28, 2015, 5:18:27 AM1/28/15
to golan...@googlegroups.com, jveri...@gmail.com
Yes, the code.google.com/p/redwood-filter looks to have what im looking for.
why did you move way from an icap filtering to a proxy filtering?
I am asking this because i think that squid project is well maintained and as good performance.

Andy Balholm

unread,
Jan 28, 2015, 4:41:18 PM1/28/15
to João Veríssimo, golang-nuts
One reason I switched was that with Go’s standard library, an HTTP proxy is not really any more complicated than an ICAP server—maybe actually simpler. I hadn’t realized that at first. A basic HTTP proxy in Go fits on one page.

Another reason was simplicity of deployment. If I do my own HTTP proxying, there is only one program to deploy and configure instead of two. Also, I was thinking about making it run on Android, and getting Squid to compile for Android would not be easy. And now there’s only one program to potentially be incompatible with the client or server instead of two. I think I’ve had fewer dropped connections and such since I got Squid out of the loop. (Not that Squid is bad, just that the more moving parts there are, the more things can go wrong.)

Also, I got tired of waiting for Squid’s SSLBump feature to be production-ready. In a proxy, I could just write my own. (If I wanted to contribute to Squid’s SSLBump to speed up its development, I would have needed to learn my way around Squid’s C++ codebase, and probably learn the OpenSSL API. To do it myself in Go, I only had to deal with my own, much smaller, codebase, and the crypto/tls package.)

PS If you CC me on your replies, I’ll see your messages quicker than if you just reply to the list.
Reply all
Reply to author
Forward
0 new messages