У меня есть бутылочный сервер (базовый 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 - нет?