What is the Pragma Header? Caching pages.. and IE
In a very simplified form, Pragma:no-cache or Pragma:cache
are now "almost" obsolete ways of passing caching instructions to client implementations, specifically browers and proxies. The way the client implementation responds to Pragma headers vary which is why the specification says it is implementation specific.
The more modern way of Cache-control
is what you can safely depend on, as almost all client implementations follow it rigidly.
Also, if you have both Cache-control
and Pragma
set for the same instruction, say caching, then Cache-control
takes precedence.
This is an excellent article about everything related to Caching and I think it makes a very interesting and useful read: http://www.mnot.net/cache_docs/
Parris
Fullstack engineer gone frontend. Currently Director of Web at Brigade. Formerly PM and Lead Frontend Engineer at Eventbrite. Focused on JS, React, GraphQL, Postgres and Build Systems. Also, familiar with WebGL, Python, (unfortunately) PHP, Go, Rust, Java and of course CSS/HTML. Current side projects: - https://github.com/fervorous/fervor - https://npmjs.org/package/iz Older projects - https://github.com/eventbrite/cartogram - https://github.com/parris/a_star.js - https://github.com/eventbrite/dorsal - https://www.npmjs.com/package/mixablejs
Updated on July 10, 2022Comments
-
Parris almost 2 years
So I am sending a header in php to cache my page (this integrates into our "CDN" (contendo/akamai) as well). I always use this pragma: cache header, I've seen various examples use it as well; however, I just checked fiddler to test traffic for this .net application we developed and it says:
Legacy Pragma Header is present: cache !! Warning IE supports only an EXACT match of "Pragma: no-cache". IE will ignore the Pragma header if any other values are present. ...
I suppose that is ok. The rest of the response seems fine and to my specs. Here is my code:
function headers_for_page_cache($cache_length=600){ $cache_expire_date = gmdate("D, d M Y H:i:s", time() + $cache_length); header("Expires: $cache_expire_date"); header("Pragma: cache"); header("Cache-Control: max-age=$cache_length"); header("User-Cache-Control: max-age=$cache_length"); }
The question is does this matter? What does the pragma header even do? Do I need it? I checked the HTTP header spec documentation and it said it is implementation specific and the only Pragma that is enforced is "Pragma: no-cache".
Is this the best choice of headers to cache for a specific amount of time?