HTTP is a Client - Server protocol. Requests are sent by an entity, the user-agent ( normally the user-agent is a Web browser ). Each individual request is sent to server which will handle it, provide an answer called response. Between this request and response there are numerous entities, collectively designated as proxies, which perform different operations and act as gateways or caches, for example.
Client - the user-agent :
The server
Proxies
Between the Web browser and the server, numerous computer and machines relay the HTTP messages. Due to the layered structure of the Web stack, most of these operate at either the transport, network or physical levels, becoming transparent at the HTTP layer and potentially making a significant impact on performance. Those operating at the application layers are called proxies. These can be transparent or not ( changing requests not going through them ), and may perform numerous function :