Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to disable browser cache for a single page?

For a small intranet site, I have a dynamic (includes AJAX) page that is being cached incorrectly by Firefox. Is there a way to disable browser caching for a single page?

Here's the setup I'm using:

  • Apache under XAMPP, running on a Windows server
  • PHP

Clarification

The content that I'm primarily concerned about is page text and the default options in some <select>s. So I can't just add random numbers to the end of some image URLs, for example.

Update:

I followed the suggestions I've gotten so far:

  • I'm sending nocache headers (see below)
  • I'm including a timestamp URL parameter and redirecting to a new one if the page is reloaded after 2 seconds, like this:

    $timestamp = $_GET['timestamp'];
    if ((time()-$timestamp) > 2) {
        header('Location:/intranet/admin/manage_skus.php?timestamp='.time());
    }
    

Now Firebug shows that the headers specify no cache, but the problem persists. Here are the response headers for the page:

Date    Fri, 25 Sep 2009 20:41:43 GMT
Server  Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i mod_autoindex_color PHP/5.2.8
X-Powered-By    PHP/5.2.8
Expires Mon, 20 Dec 1998 01:00:00 GMT
Last-Modified   Fri, 25 Sep 2009 20:41:43 GMT
Cache-Control   no-cache, must-revalidate
Pragma  no-cache
Keep-Alive  timeout=5, max=100
Connection  Keep-Alive
Transfer-Encoding   chunked
Content-Type    text/html
like image 208
Nathan Long Avatar asked Sep 25 '09 20:09

Nathan Long


People also ask

How do I disable cache for one page in WordPress?

If you have a specific page of your website you wish to exclude from caching, you can add it to Performance>Page Cache>Advanced>Never Cache following Pages. You simply need to add /users/ to Never Cache following Pages filed.

Which http equiv prevents the browser from caching the page?

HTTP-EQUIV META tags Pragma: no-cache prevents caching only when used over a secure connection.


3 Answers

Add current timestamp as parameter of url, e.g.

http://server.com/index.php?timestamp=125656789
like image 193
Anatoliy Avatar answered Oct 20 '22 12:10

Anatoliy


I think this tells you what you want:

http://www.thesitewizard.com/archive/phptutorial2.shtml

Look for "Preventing the Browser From Caching"

header( "Expires: Mon, 20 Dec 1998 01:00:00 GMT" );
header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
header( "Cache-Control: no-cache, must-revalidate" );
header( "Pragma: no-cache" );
like image 41
Craig Treptow Avatar answered Oct 20 '22 12:10

Craig Treptow


You should send the following header:

Cache-control: no-cache

in the HTTP response.

like image 30
Martin v. Löwis Avatar answered Oct 20 '22 14:10

Martin v. Löwis