Kwissle

My real-time quiz battle game Kwissle.com

Crosstips.org

My fun Crossword solver project. Crosstips.org & Krysstips.se

Kung Fu

Fujian White Crane Kung Fu

Photos

Photoalbum, both old and new.

Twitter

Follow me on Twitter

Contact me

My contact details and how to contact me.

 

KungFuPeople.com
Do you train Kung Fu?
Or know someone who does?
Then check out KungFuPeople.com


Mobile version of this page Mobile version of this page


 
Zope

'Cache-Control' or Expires


16th of September 2005

Dieter Maurer was as kind as he always is one the Zope mailing list and explained to me the difference between using the Cache-Control and the Expires header for inducing browsers to cache your web elements. He explains:

Cache control is the modern (HTTP 1.1) way, "Expires" the old (HTTP 1.0) one.

My problem is that I've know about each but never bothered to find out why there are two ways of doing the same thing. In most of my projects I've used the oldschool method of setting RFC822 formatted future dates on the Expires header, but from now on I'll use both. Dieter continues on my question "What is best to use and for what?":

Use them both:

HTTP 1.1 clients will honour "Cache-Control" (which is easier to use and much more flexible).

HTTP 1.0 clients will ignore "Cache-Control" but honour "Expires". With "Expires" you get thus at least a bit control for these old clients.

Now, let's speak code. Here's what I now do to set caching on my pages when I want to:

 def doCache(self, hours=10):
     """ set cache headers on this request if not in debug mode """
     if not self.doDebug():
         response = self.REQUEST.RESPONSE
         now = DateTime()
         then = now+int(hours/24.0)
         response.setHeader('Expires',then.rfc822())
         response.setHeader('Cache-Control', 'public,max-age=%d' % int(3600*hours))

This I can then use in say a stylesheet like this:

 <dtml-call "doCache(48)">



Comment

Sukh - 21st March 2007  [«« Reply to this]
How do I add this to my site. I would like it so when the user goes back you get an Expired page appear. I have looked over the web for a solution but cannot seem to find one. Can I simply put the above method in a script and call it each time a page is loaded.
 
Name:
Email:
hide my email address.

Your email address will be encoded to prevent email-extraction spiders from reading it so you won't get spammed if you decide to show your email address.