[drupal-devel] Caching and Opera

Tim Altman web at timaltman.com
Thu Apr 14 14:32:22 UTC 2005

On Thu, 14 Apr 2005 15:23:10 +0200, Karoly Negyesi <karoly at negyesi.net>  

> I just chatted with an Opera person who fixed my Opera via VNC. I asked
> about caching woes. He pointed me that I could configure my Opera so it
> always checks for fresh pages (it only checks whether there is something
> new, so it's not THAT big a problem). I asked whether we could omit some
> headers so that Opera won't cache the page (like node edit page):
> "Once we didn't cache pages if the http headers told opera not to cache  
> the
> page, but as many webservers are configured to set those headers without
> any good reason we had to remove that again. Many forums and dynamic  
> pages
> send that header which made opera reload the page everytime. and _many_
> users complained, so we disabled this behaviour for unsecure sites.


> So here you are. This is the latest, official word.

	Well, I guess I'll update it a bit, then.  Here's how Opera works, as far  
as I could understand the implementor:

1) Cache directives in META elements are ignored
2) The Cache-Control directives have the following meanings:
2a) if there's no "Cache-Control" header, cache the page to disk and use  
internal heuristics:
2a1) if it's a query URL (contains a "?"), treat as 'Cache-Control:  
no-cache', otherwise
2ab) use user settings
2b) no-cache -> revalidate, expires according to user settings
2b1) private, no-cache -> expire immediately
2c) no-store -> cache to RAM only (no effect on revalidation), expires  
according to user settings or when closing the program
2d) max-age -> expire page after set age
2e) must-revalidate -> treated as if no "Cache-Control" header was sent*
2f) everything else -> treated as if no "Cache-Control" header was sent

	When loading a page that we will later revalidate, we store the  
"Last-Modified" or "Etag" header.  When revalidating, we send an  
"If-Modified-Since" header and respect the result from the server (either  
a 304 or 200 response header, IINM).  See RFC 2616 for some more details  
about caching.

	So, if you want pages to be updated cross-browser, it's probably best to  
send a "Cache-control: no-cache" header along with either "Last-Modified"  
or "ETag".  This is the latest, official word. ;)

* This is probably what the person you talked to (Lars?) was referring  
to.  In Opera 7.54, we started respecting this, much to our users'  
chagrin.  In 7.54u2, we ignore it again.

Tim Altman
Core QA
Opera Software

More information about the drupal-devel mailing list