簡體   English   中英

將響應標頭添加到flask web app

[英]Add response headers to flask web app

我有一個使用render_template的燒瓶web應用程序,如下所示。我需要在響應中添加Content-Security-Policy作為附加的http響應頭。 我嘗試了下面的方法,但都失敗了,給了我500。

1。

from flask import \
Flask, \
render_template
app = Flask(__name__,template_folder='tmpl')
@app.route('/')
def index():
    resp =make_response(render_template('index.html'))
    resp.headers['Content-Security-Policy']='default-src \'self\'' 
    return resp

if __name__ == '__main__':
app.run(host='0.0.0.0', port=3001)

2。

@app.route('/')
def index():
    resp =render_template('index.html')
    resp.headers.add('Content-Security-Policy','default-src \'self\'') 
    return resp

if __name__ == '__main__':
app.run(host='0.0.0.0', port=3001)   

這可能有什么不對?

在終端上,當我以webhost:3001訪問Web應用程序時,我會看到以下內容

127.0.0.1 - - [06 / Apr / 2015 01:45:01]“GET / HTTP / 1.1”500 -

render_template返回一個字符串,而不是一個響應。 從視圖返回的字符串會自動包含在Flask的響應中,這就是您可能會感到困惑的原因。 使用呈現的模板構造響應。

from flask import make_response
r = make_response(render_template('index.html'))
r.headers.set('Content-Security-Policy', "default-src 'self'")
return r

處理這個的最漂亮的方法,假設你想要附加到你的所有響應的相同標題是燒瓶內置裝飾:

@app.after_request

所以在這種情況下,只需將此函數添加到您的路由模塊:

@app.after_request
def add_security_headers(resp):
    resp.headers['Content-Security-Policy']='default-src \'self\''
    return resp

有了這個,你的函數就像以前一樣返回render_template(...)值,而flask會自動將它包裝在一個響應中,該響應在返回給客戶端之前傳遞給after_request函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM