如何解决Flask可以在响应中发送重复的标题吗?
我希望我的flask应用程序使用相同的键和不同的值来设置多个标头,如下所示:
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
我已经知道这等效于单个标头,其值是用逗号分隔的列表(当然,仅适用于支持列表值的标头),但是我宁愿如上所述。但是标头存储在字典中,所以我不能只添加重复的键。
我也知道this question and answer,它表示requests
模块不能使用相同的密钥发送多个标头。但是这个问题是关于requests
的,而flask
有时还有其他好处。问题还超过七年,事情就发生了。
该答案是否最新?它也适用于烧瓶吗?
解决方法
请求标头
您可以有重复的标题键,但是,Flask将其转换为文本,值之间用逗号分隔,
最简单的示例是:
from flask import Flask,request
app = Flask(__name__)
@app.route('/')
def index():
print(request.headers)
return "Hello"
,并带有以下curl
:
curl http://127.0.0.1:5000 -H 'X-HEADER: 1' -H 'X-HEADER: 2'
烧瓶将在标题中为X-Header: 1,2
打印X-Header
另外,您可以使用request.headers.getlist('X-Header')
获取值列表,但是它仍然将值粘贴在一起并返回仅包含一个元素的列表。 ['1,2']
request.headers
是werkzeug.datastructures.EnvironHeaders
的实例
您当然可以修改它以使用自己的标头类。
您可以继承flask.Request
类,并使用自定义的request
类创建自己的Headers
实例
您可以在此处了解有关EnvironHeaders
的更多信息:https://werkzeug.palletsprojects.com/en/1.0.x/datastructures/#werkzeug.datastructures.EnvironHeaders
响应标题
关于响应头:
所有烧瓶响应都来自flask.Response
类。
您可以从视图中返回响应,例如:
from flask import flask,Response
app = Flask(__name__)
@app.route('/')
def index():
return Response('Hello',headers={'X-Headers': [1,2]})
您可以使用以下curl
进行测试:
curl http://127.0.0.1:5000 -vvv
我添加了-vvv
以增加详细程度并显示标题
以下内容将显示在响应标题中:
< X-Headers: 1
< X-Headers: 2
如果您不想使用Response
类,
您可以从视图返回多个值
@app.route('/')
def index():
return '<h1>Hello!</h1>',200,{'X-Headers': [1,2]}
第一个值是响应的正文,第二个是状态代码,最后一个是响应的标头。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。