Disabling caching in Flask

Question:

I have some caching issues. I’m running very small web-application which reads one frame, saves it to the disk and then shows it in browsers window.

I know, it is probably not the best solution, but every time I save this read frame with the same name and therefor any browser will cache it.

I tried to use html meta-tags – no success:

<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" />

Also, I have tried this one (flask-specific):

resp.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
resp.headers["Pragma"] = "no-cache"
resp.headers["Expires"] = "0"

This is how I tried to modify resp headers:

r = make_response(render_template('video.html', video_info=video_info))

r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
r.headers["Pragma"] = "no-cache"
r.headers["Expires"] = "0"

Still both Google Chrome and Safari do caching.

What might be the problem here?

Asked By: drsealks

||

Answers:

OK,

finally it worked with this:

@app.after_request
def add_header(r):
    """
    Add headers to both force latest IE rendering engine or Chrome Frame,
    and also to cache the rendered page for 10 minutes.
    """
    r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
    r.headers["Pragma"] = "no-cache"
    r.headers["Expires"] = "0"
    r.headers['Cache-Control'] = 'public, max-age=0'
    return r

If you add this, this function will called after each request done. Please,see here

I would be happy, if anyone could explain me why this headers overwriting did not work from the page handler?

Thank you.

Answered By: drsealks

If you have always the same problem, that Flask didn’t see the updates in JS and CSS files, that because by default, Flask has as max-age value 12 hours. You can set it to 0 to resolve the problem like this:

app = Flask(__name__)
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0

Refer to its documentation for details.

Answered By: Ilyas

A combination of
app.config[‘SEND_FILE_MAX_AGE_DEFAULT’] = 0 in the python file

and
hard reload (command + shift + R) of the chrome browser worked for me as it seems Chrome caches the static files

Answered By: code-interpreter

You can bypass the cache using ctrl + F5

Answered By: Sebastian Skopek
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.