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
To use cache-control in HTML, you use the meta tag, e.g. The value in the content field is defined as one of the four values below. HTTP 1.1. Allowed values = PUBLIC | PRIVATE | NO-CACHE | NO-STORE.
To set response headers in Flask and Python, we set the headers property of the response object. to call make_response to create response object that returns a string response. Finally, we return the resp object in the home route.
private. The private response directive indicates that the response can be stored only in a private cache (e.g. local caches in browsers). You should add the private directive for user-personalized content, especially for responses received after login and for sessions managed via cookies.
What is the Cache-Control Header. Cache-control is an HTTP header used to specify browser caching policies in both client requests and server responses. Policies include how a resource is cached, where it's cached and its maximum age before expiring (i.e., time to live).
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With