Write a wrapper for the client, which runs an a small stub on users' behalf, that can receive the requests from the proxy and service them. Since the client and the stub are separate UNIX processes, the stub has no access to the memory cache of the client and the data structures used for managing the disk cache. Also, updates to the disk cache happen asynchronously, and hence its the stub's duty to check the validity of the index that it maintains for itself. The proxy should be designed in order to service the request successfully, even if it discovers that information sent by a client stub is outdated and hence is unusable. We chose to use the second option, in spite of the difficulties involved, because the first option needs access to the sources of Netscape, which we do not have, and secondly, the second option is more general purpose, and can be used with other clients with little modification.
Any request sent by the client first goes to the proxy.
If the reply from the remote server implies no change in the document since the last update date supplied, the document received from the user stub is sent to the requesting client. On the other hand, if the remote server sends the document, it is sent to the requesting client, and the proxy's index of the locally cached documents is updated. In addition to serving the requested document, the stub also supplies a list of related documents to the proxy, that have been cached by the client. Since the individual cache is under the ownership of each user, many interesting security and protection problems come in picture. This design of DCC attempts to provide a very secure access to the cached documents.