{{short description|System for optimizing the Web}}

A '''web cache''' (or '''HTTP cache''') is a system for optimizing the World Wide Web. It is implemented both client-side and server-side. The caching of multimedia and other files can result in less overall delay when browsing the Web.<ref>{{Cite web |last=Fountis |first=Yorgos |date=4 May 2017 |title=How does the browser cache work? |url=https://pressidium.com/blog/2017/browser-cache-work/}}</ref><ref>{{Cite journal |last1=Messaoud |first1=S. |last2=Youssef |first2=H. |date=2009 |title=An analytical model for the performance evaluation of stack-based web cache replacement algorithms |url=https://onlinelibrary.wiley.com/doi/10.1002/dac.1036 |journal=International Journal of Communication Systems |language=en |volume=23 |pages=1–22 |doi=10.1002/dac.1036|s2cid=46507769 |url-access=subscription }}</ref>

==Parts of the system==

===Forward and reverse=== A forward cache is a cache outside the web server's network, e.g. in the client's web browser, in an Internet service provider, or within a corporate network. A network-aware forward cache only caches heavily accessed items. A proxy server sitting between the client and web server can evaluate HTTP headers and choose whether to store web content.

A reverse cache sits in front of one or more web servers, accelerating requests from the Internet and reducing peak server load. This is usually a content delivery network (CDN) that retains copies of web content at various points throughout a network.

===HTTP options=== The Hypertext Transfer Protocol (HTTP) defines three basic mechanisms for controlling caches: freshness, validation, and invalidation. This is specified in the header of HTTP response messages from the server.

Freshness allows a response to be used without re-checking it on the origin server, and can be controlled by both the server and the client. For example, the Expires response header gives a date when the document becomes stale, and the Cache-Control: max-age directive tells the cache how many seconds the response is fresh for.

Validation can be used to check whether a cached response is still good after it becomes stale. For example, if the response has a Last-Modified header, a cache can make a ''conditional request'' using the If-Modified-Since header to see if it has changed. The ETag (entity tag) mechanism also allows for both strong and weak validation.

Invalidation is usually a side effect of another request that passes through the cache. For example, if a URL associated with a cached response subsequently gets a POST, PUT or DELETE request, the cached response will be invalidated. Many CDNs and manufacturers of network equipment have replaced this standard HTTP cache control with dynamic caching.

==Legality== In 1998, the Digital Millennium Copyright Act added rules to the United States Code (17 U.S.C. §: 512) that exempts system operators from copyright liability for the purposes of caching.

==Server-side software== This is a list of server-side web caching software. {| style="font-size: 85%; text-align: center; width: auto;" class="sortable wikitable" |- !rowspan="2"|Name !colspan="3"|Operating system !rowspan="2"|Forward<br />mode !rowspan="2"|Reverse<br />mode !rowspan="2"|License |- !Windows !Unix-like !Other |- ! scope="row" |Apache HTTP Server | {{yes}} | {{yes|OS X, Linux, Unix, FreeBSD, Solaris, Novell NetWare}} | {{yes|OS/2, TPF, OpenVMS, eComStation}} |{{Yes}} | | {{open source|Apache 2.0}} |- ! scope="row" | aiScaler Dynamic Cache Control | {{no}} | {{yes|Linux}} | {{no}} | | | {{Proprietary}} |- ! scope="row" | ApplianSys CACHEbox | {{no}} | {{yes|Linux}} | {{no}} | | | {{Proprietary}} |- ! scope="row" | Blue Coat ProxySG | {{no}} | {{no}} | {{yes2|SGOS}} | {{Yes}} | {{Yes}} | {{Proprietary}} |- ! scope="row" | Nginx | {{yes}} | {{yes|Linux, BSD, OS X, Solaris, AIX, HP-UX}} | {{yes}} | {{Yes}} | {{Yes}} | {{open source|2-clause BSD-like}} |- ! scope="row" | Microsoft Forefront Threat Management Gateway | {{yes}} | {{no}} | {{no}} | {{Yes}} | {{Yes}} | {{Proprietary}} |- ! scope="row" | Polipo | {{yes}} | {{yes|OS X, Linux, OpenWrt, FreeBSD}} | {{dunno}} | {{Yes}} | {{Yes}} | {{open source|MIT License}} |- ! scope="row" | Squid | {{yes}} | {{yes|Linux}} | {{dunno}} | {{Yes}} | {{Yes}} | {{open source|GPL}} |- ! scope="row" | Apache Traffic Server | {{dunno}} | {{yes|Linux}} | {{dunno}} | {{Yes}} | {{Yes}} | {{open source|Apache 2.0}} |- ! scope="row" | Untangle | {{no}} | {{yes|Linux}} | {{no}} | {{Yes}} | {{Yes}} | {{Proprietary}} |- ! scope="row" | Varnish | {{no}} | {{yes|Linux}} | {{no}} | {{Needs}} a VMOD | {{Yes}} | {{open source|BSD}} |- ! scope="row" | WinGate | {{yes}} | {{no}} | {{no}} | {{Yes}} | {{Yes}} | {{Proprietary}} (Free for 8 users) |- ! scope="row" |Nuster | {{no}} | {{yes|Linux}} | {{no}} | {{Yes}} | {{Yes}} | {{open source|GPL}} |- !McAfee Web Gateway | {{no}} | {{yes2|McAfee Linux Operating System}} | {{no}} | {{Yes}} | {{Yes}} | {{Proprietary}} |}

== See also == * InterPlanetary File System - makes web caches redundant * Cache Discovery Protocol * Cache manifest in HTML5 * Content delivery network * Harvest project * Proxy server * Web accelerator * Search engine cache * Temporary Internet Files

== References == {{Reflist}}

==Further reading== * Ari Luotonen, ''Web Proxy Servers'' (Prentice Hall, 1997) {{ISBN|0-13-680612-0}} * Duane Wessels, ''Web Caching'' (O'Reilly and Associates, 2001). {{ISBN|1-56592-536-X}} * Michael Rabinovich and Oliver Spatschak, ''Web Caching and Replication'' (Addison Wesley, 2001). {{ISBN|0-201-61570-3}} {{WebManTools}}

{{DEFAULTSORT:Web Cache}} Category:Hypertext Transfer Protocol Category:Cache (computing) * Category:Web caching protocol