Возвращение объекта HTTPResponse в бутылке теряет заголовки ответа - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть бутылочный сервер (базовый http-сервер которого был заменен многопоточным CherryPy), в котором один из моих маршрутов («POST») возвращает HTTP-ответ вместо словаря json напрямую, например:

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

Теперь я добавил хук '1004 * в мое приложение бутылки, чтобы оно устанавливало заголовки в ответе для обработки CORS, например, в моем хуке after_request, который у меня есть:

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

И я могу подтвердить, что функция after_request работает и успешно устанавливает заголовки на bottle.response.

НО, моя функция маршрута возвращается ДО запуска функции after_request, и поэтому мой браузер все еще не видит ни однойиз этих заголовков в ответном сообщении.

Однако, если я просто изменю свою функцию маршрута так, чтобы она возвращала простой диктант json вместо HTTPResponse, например:

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

Затем внезапнобраузер видит заголовки, установленные моим хуком after_request.Хотя остальная часть моего кода не изменилась.

Что дает?Почему возврат HTTPResponse заставляет меня потерять все заголовки, а возврат простого json - нет?

1 Ответ

0 голосов
/ 06 декабря 2018

Попробуйте установить заголовки в новом возвращаемом объекте, например:

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

Я предполагаю, что хук after_request работает с "магическим" объектом ответа, которым управляет Bottleдля вас - поэтому, когда вы создаете и возвращаете новый один, его заголовки не изменяются.

...