One of the problems that Web browser designers have to face is that a browser should be easily extensible so that it, in principle, can support any type of document that is returned by a server. The approach followed in most cases is to offer facilities for what are known as plug-ins such as Adobe Flash Player.
What is a plugin ?
A plug-in is a small program that can be dynamically loaded into a browser for handling a specific document type or content. The latter is generally given as a MIME type. A plug-in should be locally available. Possibly after being specifically transferred by a user from a remote server. Plug-ins normally offer a standard interface to the browser and, likewise, expect a standard interface from the browser. Logically, they form an extension of the rendering engine shown in Figure.
Another client-side process that is often used is a Web proxy. Originally, such a process was used to allow a browser to handle application-level protocols other than HTTP. For example, to transfer a file from a FTP server, the browser can issue an HTTP request to a local FTP proxy, which will then fetch the file and return it embedded as HTTP.
By now most Web browsers are capable of supporting a variety of protocols, or can otherwise be dynamically extended to do so and for that reason do not need proxies. However, proxies are still used for other reasons. For example, a proxy can be configured for filtering requests and responses (bringing it close to an application-level firewall), logging, compression, but most of all caching. We return to proxy caching below. A widely used Web proxy is Squid, which has been developed as an open-source project.