在烧瓶中重定向时发出POST请求
问题内容:
我在用烧瓶工作。我处于需要将发布请求重定向到另一个保留请求方法(即“ POST”方法)的URL的情况。当我将“ GET”请求重定向到另一个接受“
GET”请求方法的URL时,就可以了。这是我正在尝试上面的示例代码。
@app.route('/start',methods=['POST'])
def start():
flask.redirect(flask.url_for('operation'))
@app.route('/operation',methods=['POST'])
def operation():
return "My Response"
我想对“ / start” URL进行“ POST”请求,而在内部也对“ / operation” URL进行“ POST”请求。如果我这样修改代码,
@app.route('/operation',methods=['GET'])
def operation():
return "My Response"
代码可以很好地处理“ GET”请求。但是我也希望能够发出POST请求。
问题答案:
默认情况下,Wikipedia中提到的中redirect
提供的功能会向Flask
客户端发送302状态代码:
许多Web浏览器都以违反此标准的方式实现了此代码,将新请求的请求类型更改为GET,而与原始请求中使用的类型无关(例如POST)。[1]因此,HTTP /
1.1(RFC
2616)添加了新的状态码303和307,以消除这两种行为之间的歧义,其中303要求将请求类型更改为GET,并保留307以保留原始发送的请求类型。
因此,发送307(而不是302)状态代码应该告诉浏览器保留使用的HTTP方法,从而实现您所期望的行为。您的呼叫redirect
将如下所示:
flask.redirect(flask.url_for('operation'), code=307)