在瓶子中返回 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未修改
我有一个 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未修改