From 9c3fc22e99fb8ea9897e30d41f97bc3fee365976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=A9=AC=E4=B8=80=E5=8F=AA?= Date: Mon, 29 Sep 2025 16:25:29 +0800 Subject: [PATCH] Delay sending http headers --- src/hypercorn/app_wrappers.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/hypercorn/app_wrappers.py b/src/hypercorn/app_wrappers.py index 56c1bfa7..83e45414 100644 --- a/src/hypercorn/app_wrappers.py +++ b/src/hypercorn/app_wrappers.py @@ -105,12 +105,16 @@ def start_response( response_body = self.app(environ, start_response) - if not response_started: - raise RuntimeError("WSGI app did not call start_response") - - send({"type": "http.response.start", "status": status_code, "headers": headers}) try: + first_chunk = True for output in response_body: + if first_chunk: + if not response_started: + raise RuntimeError("WSGI app did not call start_response") + + send({"type": "http.response.start", "status": status_code, "headers": headers}) + first_chunk = False + send({"type": "http.response.body", "body": output, "more_body": True}) finally: if hasattr(response_body, "close"):