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
Use the
response.cache_control
object; this is aResponseCacheControl()
instance letting you set various cache attributes directly. Moreover, it'll make sure not to add duplicate headers if there is one there already.You can set the default value for all static files when you create the Flask application:
Note that if you modify
request.cache_control
inafter_request
, as in the accepted answer, this will also modify theCache-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:Not completely sure this is the best way, but it's working for me so far.