#### 1.7.1 Harvest and Squid

Harvest, the grandfather of all web caches, has since evolved into Squid.

Squid sports an elegant single-threaded non-blocking architecture and multiplexes multiple clients in a single process. It also features almost complete support for HTTP/1.1, although for some reason it doesn't currently advertise it.

Squid is designed as a large-scale shared proxy running on a dedicated machine, and therefore carries certain design decisions which make it difficult to use as a personal proxy. Because Squid keeps all resource meta-data in memory, it requires a fair amount of RAM in order to manipulate a reasonably sized cache.

Squid doesn't cache partial instances, and has trouble with instances larger than available memory1. If a client connection is interrupted, Squid has to decide whether to continue fetching the resource (and possibly waste bandwidth) or discard what it already has (and possibly waste bandwidth).

Some versions of squid would, under some circumstances, pipeline up to two outgoing requests on a single connection. At the time of writing, this feature appears to have been disabled in the latest version.

Squid's developers have decided to re-write it in C++.

#### Footnotes

[1] Recent versions of Squid support instances larger than available memory by using a hack that the authors call a “sliding window algorithm”.