Python,Flask:如何为所有响应设置响应头

新手上路,请多包涵

我想将我所有的 http 标头响应设置为如下所示:

 response.headers["X-Frame-Options"] = "SAMEORIGIN"

我检查了 这个问题,但它只更改了一个特定控制器的标题。我想在类似于以下逻辑的“before_request”函数中更改我的所有标头。我怎样才能做到这一点?

 @app.before_request
def before_request():
    # response.headers["X-Frame-Options"] = "SAMEORIGIN"

原文由 Saeid 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
2 个回答

@app.after_request() hook 中设置标头,此时您有一个响应对象来设置标头:

 @app.after_request
def apply_caching(response):
    response.headers["X-Frame-Options"] = "SAMEORIGIN"
    return response

flask.request 上下文 在该挂钩运行时仍然可用,因此此时您仍然可以根据请求改变响应。

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 3.0 许可协议

@app.after_request() hook 不适合我的用例。

我的用例如下:我有一个谷歌云功能,我想为所有响应设置 CORS 标头。可能有多个响应,因为我必须验证输入并在有问题时返回,我必须处理数据并可能在出现问题时提前返回等。所以我创建了一个辅助函数,如下所示:

 # Helper function to return a response with status code and CORS headers
def prepare_response(res_object, status_code):
    response = flask.jsonify(res_object)
    response.headers.set('Access-Control-Allow-Origin', '*')
    response.headers.set('Access-Control-Allow-Methods', 'GET, POST')
    return response, status_code

因此,当我想返回一个响应(总是带有 CORS 标头)时,我现在可以调用此函数,而无需复制启用 CORS 所需的 response.headers 设置。

原文由 Rafael Marques 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏