Skip to content

Commit 619db15

Browse files
fix(asgi): process response header (#4443) (#4504) (#4543)
When using ASGI middleware response headers were not processed. Co-authored-by: Vojtech Orgon <[email protected]> Co-authored-by: Kyle Verhoog <[email protected]> Co-authored-by: Brett Langdon <[email protected]> Co-authored-by: Brett Langdon <[email protected]> (cherry picked from commit d1881e4) Co-authored-by: Vojta Orgoň <[email protected]>
1 parent 3963d55 commit 619db15

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

ddtrace/contrib/asgi/middleware.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,10 @@ async def wrapped_send(message):
177177
else:
178178
status_code = None
179179

180-
if "headers" in message:
181-
response_headers = message["headers"]
182-
else:
180+
try:
181+
response_headers = _extract_headers(message)
182+
except Exception:
183+
log.warning("failed to extract response headers", exc_info=True)
183184
response_headers = None
184185

185186
trace_utils.set_http_meta(
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
fixes:
3+
- |
4+
ASGI: response headers are correctly processed instead of ignored

tests/contrib/asgi/test_asgi.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,3 +542,16 @@ async def test_host_header(scope, tracer, test_spans, host):
542542
assert test_spans.spans
543543
request_span = test_spans.spans[0]
544544
assert request_span.get_tag("http.url") == "http://%s/" % (host,)
545+
546+
547+
@pytest.mark.asyncio
548+
async def test_response_headers(scope, tracer, test_spans):
549+
with override_http_config("asgi", {"trace_headers": ["content-type"]}):
550+
app = TraceMiddleware(basic_app, tracer=tracer)
551+
async with httpx.AsyncClient(app=app) as client:
552+
response = await client.get("http://testserver/")
553+
assert response.status_code == 200
554+
555+
assert test_spans.spans
556+
request_span = test_spans.spans[0]
557+
assert "http.response.headers.content-type" in request_span.get_tags().keys()

0 commit comments

Comments
 (0)