Using Flask, how do I modify the Cache-Control header for ALL output?
Use the response.cache_control
object; this is a ResponseCacheControl()
instance letting you set various cache attributes directly. Moreover, it'll make sure not to add duplicate headers if there is one there already.
@app.after_requestdef add_header(response): response.cache_control.max_age = 300 return response
You can set the default value for all static files when you create the Flask application:
app = Flask(__name__)app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 300
Note that if you modify request.cache_control
in after_request
, as in the accepted answer, this will also modify the Cache-Control
header for static files and may override the behavior you set as I showed above. I'm currently using the following code to completely disable caching for dynamically generated content but not static files:
# No cacheing at all for API endpoints.@app.after_requestdef add_header(response): # response.cache_control.no_store = True if 'Cache-Control' not in response.headers: response.headers['Cache-Control'] = 'no-store' return response
Not completely sure this is the best way, but it's working for me so far.