A proxy is a program that acts as both a client and a server. It listens for client requests and forwards them to servers, and forwards the servers’ replies to clients.
An HTTP proxy can optimise web traffic away by caching server replies, storing them in memory in case they are needed again. If a reply has been cached, a later client request may, under some conditions, be satisfied without going to the source again.
In addition to taking the shortcuts made possible by caching, proxies can improve performance by generating better network traffic than the client applications would do.
Proxies are also useful in ways unrelated to raw performance. A proxy can be used to contact a server that is not directly accessible to the client, for example because there is a firewall in the way (see Parent proxies), or because the client and the server use different lower layer protocols (for example IPv4 and IPv6). Another common application of proxies is to modify the data sent to servers and returned to clients, for example by censoring headers that expose too much about the client’s identity (see Censoring headers) or removing advertisements from the data returned by the server (see Forbidden).
Polipo is a caching HTTP proxy that was originally designed as a personal proxy, i.e. a proxy that is used by a single user or a small group of users. However, it has successfully been used by larger groups.