[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>
wrote:
> 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