返回瓶子中的HTTPResponse对象会丢失响应头

2024-04-20 09:55:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个瓶子服务器(它的底层http服务器已经被多线程CherryPy替换掉),其中一个路由(POST)直接返回http响应,而不是json字典,例如:

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

现在,我已经将after_request'钩子添加到我的瓶子应用程序中,这样它就可以在响应上设置头来处理CORS,例如,在我的after_request钩子中,我有:

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

我可以确认after_request函数运行并在bottle.response上成功设置头。你知道吗

但是,我的route函数在after\u请求函数运行之前返回,因此我的浏览器在响应消息中仍然看不到这些头。你知道吗

但是,如果我只是修改route函数以返回一个简单的json dict,而不是HTTPResponse,例如:

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

然后突然,浏览器看到由我的after\u请求钩子设置的头。即使我剩下的代码没有改变。你知道吗

有什么好处?为什么返回HTTPResponse会使我丢失所有的头文件,而仅仅返回一个简单的json就不会了?你知道吗


Tags: 函数服务器jsonhttp瓶子bottlereturnresponse
1条回答
网友
1楼 · 发布于 2024-04-20 09:55:17

尝试在要返回的新对象中设置标题,如下所示:

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

我的猜测是after_request钩子操作的是瓶子为您管理的“magic”响应对象,因此当您创建并返回一个新的对象时,它的头不会被修改。你知道吗

相关问题 更多 >