2014-04-16 15 views
12

BuFlask'ı kullanarak, TÜM çıktı için Önbellek denetimi üstbilgisini nasıl değiştirebilirim?

@app.after_request 
def add_header(response): 
    response.headers['Cache-Control'] = 'max-age=300' 
    return response 

kullanarak çalıştı Ama bu yinelenen Cache-Control başlık görünmesine neden olur. Ben sadece max-age = 300 istiyorum, max-age = 1209600 satır değil!

$ 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 
+0

Bu kirli bir yol olabilir ama her zaman başlık 'Cache-Control' zaten varsa kontrol edip yaparsa silin ve sonra üstbilgi ekleyebilirsiniz. Response.headers içinde 'Cache-Control' gibi bir şey var: del response.headers ['Cache-Control'] – codegeek

cevap

34

response.cache_control object; Bu, çeşitli önbellek özelliklerini doğrudan ayarlamanıza izin veren bir ResponseCacheControl() instance. Üstelik, zaten var ise çift başlıkları eklemediğinizden emin olun. Eğer, kabul edilen yanıt olarak, after_request bu irade request.cache_control değiştirirseniz o

app = Flask(__name__) 
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 300 

Not: Eğer Matara uygulama oluşturduğunuzda

@app.after_request 
def add_header(response): 
    response.cache_control.max_age = 300 
    return response 
+2

Ayrıca 'response.cache_control.public = True'. Birkaç doc kesimleriyle bağlantılı olduğunu –

+0

Başar, yani 'eğer 'Cache-Control' değil ...' bit, teşvik etmek çok akıllı olmadığını kontrol etmek için – kevlarr

6

Tüm statik dosyalar için varsayılan değer ayarlayabilirsiniz Ayrıca, statik dosyalar için Cache-Control başlığını değiştirin ve yukarıda belirttiğim gibi ayarladığınız davranışı geçersiz kılabilir. Şu anda dinamik olarak oluşturulan içerikten tamamen devre dışı bırakmak önbelleğe alma ama statik dosyalar için aşağıdaki kodu kullanıyorum:

# 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 

tamamen emin değil bu en iyi yoldur, ama şu ana kadar benim için çalışıyor.

+0

Şeref gerçekten yararlı oldu! – kevlarr

İlgili konular