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?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 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.
Method 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.
Method 3
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
Method 4
You can bypass the cache using ctrl + F5
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0