1. A method implemented at least in part by a computer, the method comprising: receiving, at a client, a request for data that is located on a remote server; determining whether the data is cached in a local cache of the client; if the data is cached in the local cache, obtaining the data from the local cache; if the data is not cached in the local cache, determining if the data is cached in a peer cache; if the data is cached in the peer cache, retrieving the data from the peer cache; and if the data is not cached in the peer cache, retrieving the data from the remote server.