在瓶子中返回 HTTPResponse object 会丢失响应 headers

Returning HTTPResponse object in bottle loses response headers

我有一个 bottle 服务器(其底层 http 服务器已被 multi-threaded CherryPy 替换),其中我的一个路由('POST')return 是一个 HTTP直接响应而不是 json 字典,例如:

return HTTPResponse(status=200,body=json.dumps({'body':'my body'})

现在,我已将“after_request' 挂钩添加到我的 Bottle 应用程序中,这样它将在响应中设置 headers 以处理 CORS,例如,在我的 after_request 挂钩中:

bottle.response.set_header('Access-Control-Allow-Origin', '*')

而且我可以确认 after_request 函数在 bottle.response 上成功运行并设置了 headers。

但是,我的路由函数 returns 在 after_request 函数运行之前,所以我的浏览器仍然在响应消息中看到那些 headers 中的 none。

但是,如果我只是将路由函数修改为 return 一个简单的 json 字典,而不是 HTTPResponse,例如:

return json.dumps({'body':'my body'}

然后突然间,浏览器看到了我的 after_request 钩子设置的 headers。即使我的其余代码未更改。

什么给了?为什么 returning HTTPResponse 让我失去所有 headers,但 returning 只是一个简单的 json 却没有?

尝试在您正在 return 的新 object 中设置 headers,如下所示:

return HTTPResponse(status=200, body=json.dumps({'body': 'my body'}, headers={'Access-Control-Allow-Origin': '*'})

我的猜测是 after_request 挂钩在 Bottle 为您管理的 "magic" 响应 object 上运行 - 所以当您创建并 return 一个 new一个,其headers未修改