Disabling caching in Flask [duplicate]
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?
Solution 1:
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.
Solution 2:
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.