一尘不染

将响应标头添加到Flask Web应用

flask

我有一个Flask Web应用程序,它使用render_template如下,我需要在响应中添加一个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) 

这里有什么问题?

在终端上,以localhost:3001的身份访问Web应用程序时,我看到以下内容

127.0.0.1–[2015年4月6日01:45:01]“ GET / HTTP / 1.1” 500-


阅读 458

收藏
2020-04-08

共1个答案

一尘不染

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
2020-04-08