Bottle:HEAD 总是退回到 GET,因此函数总是执行两次?

Bottle: HEAD always falls back to GET, thus functions always executed twice?

我正在使用Bottle to implement a web interface for a simple database system. As documented,Bottle 通过回退到相应的GET 路由并切断响应主体来处理HTTP HEAD 请求。但是,根据我的经验,这意味着附加到 GET 路由的函数会执行 两次 以响应 GET 请求。如果该函数执行有副作用的操作(例如数据库操作),这可能会出现问题。

有没有办法避免这种双重执行的发生?或者我应该为每个 GET 路由定义一个假的 HEAD 路由?

更新:听起来 Bottle 正在按设计工作(每个请求只调用一次函数)。您的浏览器是 HEAD 请求的明显来源。


在 HEAD 请求中,Bottle 调用该方法一次,而不是两次。您能否演示一些代码来显示您所描述的行为?当我 运行 以下代码时,我只看到一次“被调用”行:

from bottle import Bottle, request

app = Bottle()

@app.get("/")
def home():
    print(f"Called: {request.method}")
    return "Some text\n"

app.run()

输出:

$ curl --head http://127.0.0.1:8080/
Called: HEAD
HTTP/1.0 200 OK
127.0.0.1 - - [13/Jan/2021 08:28:02] "HEAD / HTTP/1.1" 200 0
Date: Wed, 13 Jan 2021 13:28:02 GMT
Server: WSGIServer/0.2 CPython/3.8.6
Content-Length: 10
Content-Type: text/html; charset=UTF-8