33

When "Expires" and "Cache-Control" headers are not specified, but a "Last-Modified" header is specified, browsers have to guess at how long they should keep the document in cache. Some browsers do use algorithms that let the page remain in cache for a day or more. Google caching best practices guide states: Last-Modified is a "weak" caching header in ...


16

It might come from 60 * 60 * 24 * 7 * 4 * 12 = 29030400 where each month consists of exactly 4 weeks.


11

If there is no Cache-Control header and no Expires header, but there is a Last-Modified header (which most web servers send by default for static assets), most browsers will use heuristic freshness to determine how long to cache that asset for. The typical calculation for this (which is the one suggested by RFC 7234) is: (current time - last modified time)...


10

According to Google's Make the Web Faster, pages with query parameters are not cached by many HTTP proxies. Most proxies, most notably Squid up through version 3.0, do not cache resources with a "?" in their URL even if a Cache-control: public header is present in the response. To enable proxy caching for these resources, remove query strings from ...


9

See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3: The max-age directive on a response implies that the response is cacheable (i.e., "public") unless some other, more restrictive cache directive is also present. It's conceivable (likely?) that there are proxies in the wild which break this but since the only failure mode could be ...


9

You have two approaches to this problem. The clean way is to set the headers returned for GET data.txt preventing the browser (or proxy) from storing the response in cache. Using apache, this can usually be done by adding a few lines in a .htaccess file. If this data.txt is a static file, this is the only way you could control the headers. From https://...


6

24 hours is too little to suffice as cache control :) In theory, images never change without their name also changing, so you can set that easily to a year (or a month if you feel more comfortable with that). If you replace an image with a new image, it has a new name. picture-of-cat-on-18th-birthday.jpg will not suddenly be an other image with the same ...


6

no-cache is not as strong as no-store. Chrome's documentation indicates that no-cache indicates a re-usable document, while no-store indicates that it should not be re-used. Based on this information, your Cache-Control header should simply be: Cache-Control: no-store The extra values in it may be letting Chrome pick and choose which it would like to ...


4

This is normal for dynamic pages. An ETag is a unique identifier for that version of a particular file. The web server can automatically set ETags for static files (html, css etc.), because it can work out when their contents were last changed by looking at the file's last modified time (and some other attributes). There's no way for the web server to know ...


4

I see that the previous answer says that 24 hours is not enough. But looking into Google document: https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching#defining-optimal-cache-control-policy it says that the images be cached for 1 day for optimal caching. Caching images for short time makes sense, because in ...


4

It might be as simple as missing one keyword that is causing your issue. ## EXPIRES CACHING ## <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpg "access plus 1 day" ExpiresByType image/jpeg "access plus 1 day" ExpiresByType image/gif "access plus 1 day" ExpiresByType image/png "access plus 1 day" ExpiresByType text/css "access plus 1 ...


3

It slows down your page loading speed which can potentially be a negative ranking signal.


3

I was serving my static files using Django while my media files using Apache. Serving my static files through Apache solved this issue.


3

The easiest thing for you is to bypass your cache. This is usually done by pressing Ctrl + F5. There are some variances by browser and you can check on this and see how to completely clear the cache at this Wikipedia page on 'Bypass your cache'. If you opt to completely clear your cache after changes are made to the site this will probably work best for ...


3

If you put <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" /> between your <head> tags, this should force the browser to not cache anything in most browsers.


3

What is it? The Vary HTTP response header tells user agents (clients) that the server's response can vary if the client changes any of the mentioned request headers. Vary: Accept-Encoding This means that if the browser sends a different value in the Accept-Encoding request header, the server might send a different response. (It should be noted that the ...


3

No. The browser will send the same information on a refresh as if the user had just come to that page, with the same referrer information. Hence the problem of double-POSTing if someone refreshes the destination page for a form. What you could do is have a refresh button on the page (as Google Ads used to have before they removed it), which you could use to ...


2

The proper way to do this is to use the HTTP Vary header, like this: Vary: Referer Note that you can't actually tell the browser to automatically use the cached copy for all requests from the "same forum", for two reasons: first, the browser has no idea what constitutes a "forum", and second, even if you defined "same forum" as, say, "same domain", the ...


2

I believe it is because the browser is not sending a If-Modified-Since during the Request, right? Correct. Do I need to change something in the initial Response headers to make 304s happen? Yes. If you compare original response headers for those resources that have 304 response code on subsequent requests, you will notice: All of them located in /...


2

That's not correct. If you would like to extend CloudFlare's CDN to cache more than static content by default, you can use Page Rules to extend the caching capabilities to cache more content. Page Rules can be accessed by going to the settings for the domain that you want to create a Page Rule for. If you want to cache everything on, say, https://www....


2

There is no ideal length. It all depends on how often this content changes for you (and the files usually cached should not change often). I'm not in front my the code for my personal website but that content rarely changes so I have it set to be a week or two IIRC. If your content changes on a daily basis then a 24 hour expiration seems appropriate. ...


2

<FilesMatch "^(.*)\-\-.+\.(js|css)$"> FilesMatch takes a filename and matches against the file system, not the URL. The underlying file is still called "myscript.js", so this pattern should be something like: \.(js|css)$ (Aside... your example request appears to be for common.js - which wouldn't have matched your pattern anyway - shouldn't this be ...


2

When an HTML page or content (CSS, JavaScript, images, fonts... etc.) is expired past it's cache control header time, how long do browsers keep the content around to make use of 304 responses? While browsers may keep the content stored on disk in a temporary or cache directory beyond the expiry date/time, the browser will consider it out-of-date (not '...


2

When new content is launched, it may not be absolutely critical that users see it right away. In that case you could relax your cache controls and allow your content to be cached for an hour or two and not require that the user re-validates. Actually with "must-revalidate", I don't see any point in not allowing your pages to be cached forever. Otherwise ...


2

Turning off browser caching can be important for: Security (so that pages can't be found in browser cache) Accurate site stats (so that you can count each visit to a page) I've worked with big sites that get lots of search engine referrals and don't allow page caching. It is very possible to have great rankings even without allowing browser caching. I ...


2

The expires header is related to the page, not fragments of it. Lets go over the basics. You send HTML to the browser, all of it or a stream, doesn't matter for the example. The browser receives it and starts parsing it. At the same time, once it starts parsing, all the other linked files are called, like images, css, js, etc. Some parallel connections ...


2

The right way would be to change the Apache configuration (via htaccess or conf file) with the expire headers with very low caching time. Double check if you have access to .htaccess file if not Apache conf file. However, if you absolutely can't alter .htaccess or Apache conf, there may be a trick to achieve it. Most developers use this trick to renew the ...


2

By "type" I assume you mean mime-type, in which case you should look at mod_expires and the ExpiresByType directive - this is undoubtedly the easiest/modern way to set the appropriate Expires and Cache-Control (max-age directive) HTTP response headers. It goes something like: ExpiresActive On ExpiresByType application/javascript "access plus 1 month" ...


2

The Expires header is the simplest. If you're using Apache you can set this by mime type using mod_expires. In your .htaccess: <IfModule mod_expires.c> ExpiresActive On ExpiresByType text/css "access plus 1 day" ExpiresByType image/png "access plus 1 day" </IfModule>


2

There appear to be two things you need to check. First edit /opt/bitnami/apache2/conf/httpd.conf and make sure that the line loading mod_expires is not commented out (comments start with #). If it is, uncomment it and restart Apache. (source) If you are trying to set the expires headers in .htaccess you will also have to allow overrides in your ...


Only top voted, non community-wiki answers of a minimum length are eligible