【问题标题】:How to change a HEAD request to a GET request with the redirection with Flask?如何使用 Flask 重定向将 HEAD 请求更改为 GET 请求?
【发布时间】:2020-04-23 02:20:29
【问题描述】:

我有这个代码:

# -*- coding: utf-8 -*-
from flask import Flask, render_template,request,json,make_response,Response,request,redirect,url_for
from flask_cors import CORS

app = Flask(__name__)
CORS(app,resources=r'/*')

@app.route('/operation',methods=['GET'])
def payload():
    return render_template('page.html')

@app.route('/',methods=['HEAD'])
def start():
    return redirect('http://127.0.0.1:8001/operation',code=303)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port="8001",debug = True)

当我收到 HEAD 请求时,我想将请求重定向到 GET 请求并返回一个 html 页面。问题是当 GET 在 methods 参数中单独设置时,Flask 会自动添加方法 HEAD(来自文档):

如果方法列表中存在 GET 而 HEAD 不存在,则会自动添加 HEAD

修改 Flask 的源代码可以避免这种行为,但是当客户端 A 向我的服务器发出 HEAD 请求时,它会将那个请求重定向到 /operation 但同时维护 HEAD 方法重定向的 303 或 302 状态码。可能我不理解这些代码的逻辑(我也阅读了相关的 RFC),但是方法不应该从 HEAD 更改为 GET 吗?

非常感谢您的回答!

【问题讨论】:

    标签: python-3.x flask


    【解决方案1】:

    它应该与url_for 方法一起使用。您的代码将如下所示

    # -*- coding: utf-8 -*-
    from flask import Flask, render_template,request,json,make_response,Response,request,redirect,url_for
    from flask_cors import CORS
    
    app = Flask(__name__)
    CORS(app,resources=r'/*')
    
    @app.route('/operation',methods=['GET'])
    def payload():
        return render_template('page.html')
    
    @app.route('/',methods=['HEAD'])
    def start():
        return redirect(url_for('payload'),code=303)
    
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port="8001",debug = True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 2019-10-12
      • 2021-11-01
      相关资源
      最近更新 更多