I tried using this
@app.after_request
def add_header(response):
response.headers['Cache-Control'] = 'max-age=300'
return response
But this causes a duplicate Cache-Control header to appear. I only want max-age=300, NOT the max-age=1209600 line!
$ curl -I http://my.url.here/ HTTP/1.1 200 OK Date: Wed, 16 Apr 2014 14:24:22 GMT Server: Apache Cache-Control: max-age=300 Content-Length: 107993 Cache-Control: max-age=1209600 Expires: Wed, 30 Apr 2014 14:24:22 GMT Content-Type: text/html; charset=utf-8
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
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_request
def add_header(response):
response.cache_control.max_age = 300
return response
Method 2
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_request
def 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.
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