A Note About the HTTP
June 21, 1999
HTTP 1.1 compliance is mentioned several times in this document.
As of the time it was written, the protocol is a work in progress.
Because of this, it is virtually impossible for an application
(whether a server, proxy or client) to be truly compliant. However,
the protocol has been openly discussed for some time, and
feature-frozen for enough time to allow developers to use the ideas
contained in it, like Cache-Control and ETags. When HTTP 1.1 is
final, expect more vendors to openly state that their applications
are compliant.
Generally speaking, it's best to use the latest version of
whatever Web server you've chosen to deploy. Not only will they
likely contain more cache-friendly features, new versions also
usually have important security and performance improvements.
Apache 1.3
Apache (http://www.apache.org/) uses optional
modules to include headers, including both Expires and
Cache-Control. Both modules are available in the 1.2 or greater
distribution.
The modules need to be built into Apache; although they are included in
the distribution, they are not turned on by default. To find out if the
modules are enabled in your server, find the httpd binary and run httpd
-l; this should print a list of the available modules. The modules
we're looking for are mod_expires and mod_headers.
- If they aren't available, and you have administrative access, you
can recompile Apache to include them. This can be done either by
uncommenting the appropriate lines in the Configuration file, or using the
-enable-module=expires and -enable-module=headers
arguments to configure (1.3 or greater). Consult the INSTALL file found with
the Apache distribution.
Once you have an Apache with the appropriate modules, you can
use mod_expires to specify when objects should expire, either in
.htaccess files or in the server's access.conf file. You can
specify expiry from either access or modification time, and apply
it to a file type or as a default. See
http://www.apache.org/docs/mod/mod_expires.html for more
information, and speak with your local Apache guru if you have
trouble.
To apply Cache-Control headers, you'll need to use the
mod_headers module, which allows you to specify arbitrary HTTP
headers for a resource. See
http://www.apache.org/docs/mod/mod_headers.html
Here's an example .htaccess file that demonstrates the use of
some headers.
- .htaccess files allow web publishers to use commands normally
only found in configuration files. They affect the content of the
directory they're in and their subdirectories. Talk to your server
administrator to find out if they're enabled.
### activate mod_expires
ExpiresActive On
### Expire .gif's 1 month from when they're accessed
ExpiresByType image/gif A2592000
### Expire everything else 1 day from when it's last modified
### (this uses the Alternative syntax)
ExpiresDefault "modification plus 1 day"
### Apply a Cache-Control header to index.html
<Files index.html>
Header append Cache-Control "public, must-revalidate"
</Files>
- Note that mod_expires automatically calculates and inserts a
Cache-Control:max-age header as appropriate.
Netscape Enterprise 3.6
Netscape Enterprise Server (http://www.netscape.com/) does not
provide any obvious way to set Expires headers. However, it has
supported HTTP 1.1 features since version 3.0. This means that HTTP
1.1 caches (proxy and browser) will be able to take advantage of
Cache-Control settings you make.
To use Cache-Control headers, choose Content Management |
Cache Control Directives in the administration server. Then,
using the Resource Picker, choose the directory where you want to
set the headers. After setting the headers, click 'OK'. For more
information, see
http://developer.netscape.com/docs/manuals/enterprise/admnunix/content.htm#1006282
MS IIS 4.0
Microsoft's Internet Information Server (http://www.microsoft.com/) makes it
very easy to set headers in a somewhat flexible way. Note that this
is only possible in version 4 of the server, which will run only on
NT Server.
To specify headers for an area of a site, select it in the
Administration Tools interface, and bring up its properties.
After selecting the HTTP Headers tab, you should see two
interesting areas; Enable Content Expiration and
Custom HTTP headers. The first should be self-explanatory, and
the second can be used to apply Cache-Control headers.
See the ASP section below for information about setting headers
in Active Server Pages. It is also possible to set headers from
ISAPI modules; refer to MSDN for details.
Lotus Domino R5
Lotus' (http://www.lotus.com/) servers are
notoriously difficult to cache; they don't provide any validators,
so both browser and proxy caches can only use default mechanisms
(i.e., once per session, and a few minutes of 'fresh' time,
usually) to cache any content from them.
Even if this limitation is overcome, Notes' habit of referring
to the same object by different URLs (depending on a variety of
factors) bars any measurable gains. There is also no documented way
to set an Expires, Cache-Control or other arbitrary HTTP header.
Frequently Asked Questions
Caching Tutorial for Web Authors and Webmasters
Implementation Notes - Server-Side Scripting
|