web-dev-qa-db-ja.com

Flaskでキャッシュを無効にする

キャッシュに関する問題があります。私は1つのフレームを読み取り、ディスクに保存してからブラウザーウィンドウに表示する非常に小さなWebアプリケーションを実行しています。

おそらく最善の解決策ではありませんが、この読み取りフレームを同じ名前で保存するたびに、ブラウザはキャッシュします。

HTMLメタタグを使用しようとしました-成功しませんでした:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

また、私はこれを試しました(フラスコ固有):

resp.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
resp.headers["Pragma"] = "no-cache"
resp.headers["Expires"] = "0"

これは私がrespヘッダーを変更しようとした方法です:

r = make_response(render_template('video.html', video_info=video_info))

r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
r.headers["Pragma"] = "no-cache"
r.headers["Expires"] = "0"

それでも、Google ChromeとSafariはキャッシュを行います。

ここで何が問題なのでしょうか?

前もって感謝します

32
drsealks

OK、

最後にこれでうまくいきました:

@app.after_request
def add_header(r):
    """
    Add headers to both force latest IE rendering engine or Chrome Frame,
    and also to cache the rendered page for 10 minutes.
    """
    r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
    r.headers["Pragma"] = "no-cache"
    r.headers["Expires"] = "0"
    r.headers['Cache-Control'] = 'public, max-age=0'
    return r

これを追加すると、この関数はリクエストが完了するたびに呼び出されます。 こちら をご覧ください

このヘッダーの上書きがページハンドラーから機能しなかった理由を誰かが説明してくれたら嬉しいです。

ありがとうございました。

50
drsealks

常に同じ問題がある場合、FlaskはJSファイルとCSSファイルの更新を確認できませんでした。デフォルトでは、Flaskはこの値を0に設定すると、次のような問題を解決できます。

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

詳細については、 そのドキュメント を参照してください。

7
Ilyas