[Chapter 3] 3.6 The "Expires" and "Pragma" Headers
Author: Shishir Gundavaram
Date: Tue Aug 26 16:33:21 1997

#

| Chapter 3 Output from the Common Gateway Interface |

## 3.6 The "Expires" and "Pragma" Headers

Most browsers cache (or store internally) the documents you access. This is a very positive feature that saves a lot of resources; the browser doesn't have to retrieve the document every time you look at it. However, it can be a slight problem when you are dealing with virtual documents created by CGI programs. Once the browser accesses a virtual document produced by a CGI program, it will cache it. The next time you try to access the same document, the browser will not make a request to the server, but will reload the document from its cache. To see the effects of caching, try running the following program:

    #!/usr/local/bin/perl
    chop ($current_date = `/bin/date`);
    $script_name = $ENV{'SCRIPT_NAME'};
    print "Content-type: text/html", "\n\n";
    print "<HTML>", "\n";
    print "<HEAD><TITLE>Effects of Browser Caching</TITLE></HEAD>", "\n";
    print "<BODY><H1>", $current_date, "</H1>", "\n";
    print "<P>", qq|<A HREF="$script_name">Click here to run again!</A>|, "\n";
    print "</BODY></HTML>", "\n";
    exit (0);

This program displays the current time, as well as a hypertext link to itself. If you click on the link to run the program again, the date and time that is displayed should change, but it does not, because the browser is retrieving the cached document. You need to explicitly tell the browser to reload the document if you want to run the CGI program again.

Fortunately, there is a solution to this problem. If you don't want a virtual document to be cached, you can use the Expires and/or Pragma headers to instruct the client not to cache the document.

    #!/usr/local/bin/perl
    print "Content-type: text/html", "\n";
    print "Pragma: no-cache", "\n\n";
    .
    .
    .

or

    #!/usr/local/bin/perl
    print "Content-type: text/html", "\n";
    print "Expires: Wednesday, 27-Dec-95 05:29:10 GMT", "\n\n";
    .
    .
    .

However, some browsers don't handle these headers correctly, so don't rely on them.

Server Redirection |  | Status Codes