InvalidHeader: Invalid HTTP Header: 'TRANSFER-ENCODING'
(1 additional frame(s) were not displayed)
...
File "gunicorn/http/parser.py", line 41, in __next__
self.mesg = self.mesg_class(self.cfg, self.unreader, self.source_addr, self.req_count)
File "gunicorn/http/message.py", line 259, in __init__
super().__init__(cfg, unreader, peer_addr)
File "gunicorn/http/message.py", line 62, in __init__
self.set_body_reader()
File "gunicorn/http/message.py", line 461, in set_body_reader
super().set_body_reader()
File "gunicorn/http/message.py", line 186, in set_body_reader
raise InvalidHeader("TRANSFER-ENCODING", req=self)
AttributeError: 'Response' object has no attribute 'status_code'
(3 additional frame(s) were not displayed)
...
File "gunicorn/workers/sync.py", line 69, in run_for_one
self.accept(listener)
File "gunicorn/workers/sync.py", line 31, in accept
self.handle(listener, client, addr)
File "gunicorn/workers/sync.py", line 157, in handle
self.handle_error(req, client, addr, e)
File "gunicorn/workers/base.py", line 278, in handle_error
self.log.access(resp, req, environ, request_time)
File "common/gunicorn/logging.py", line 37, in access
"response_status": resp.status_code,
Exception in worker process
Sentry Issue: FLAGSMITH-API-69B
Root cause
When gunicorn rejects a request during parsing,
handle_error()builds the Response by hand and sets onlyresp.status. OurPrometheusGunicornLogger.access()readsresp.status_code, which then raises AttributeError.Suggested fix
Read the status resiliently on the error path rather than assuming
status_codeexists — e.g.getattr(resp, "status_code", None), or derive it fromresp.status(int(resp.status.split()[0])whenresp.statusis a string), mirroring how gunicorn's own logger tolerates responses that never went throughstart_response().