Skip to content

Commit 99854bd

Browse files
authored
fix(tracing): Take first sentry-trace header in case multiple are supplied (#6722)
#### Issues * Resolves: #6703 * Resolves: PY-2571
1 parent b00ef73 commit 99854bd

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

sentry_sdk/tracing_utils.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,14 @@ def extract_sentrytrace_data(
437437
if not header:
438438
return None
439439

440+
if "," in header:
441+
# Multiple headers may have been combined into one comma-separated value (RFC 7230 3.2.2); use the first non-empty one.
442+
parts = [part.strip() for part in header.split(",")]
443+
header = next((part for part in parts if part), "")
444+
445+
if not header:
446+
return None
447+
440448
if header.startswith("00-") and header.endswith("-00"):
441449
header = header[3:-3]
442450

tests/tracing/test_http_headers.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,27 @@ def test_sentrytrace_extraction(sampling_decision):
3838
}
3939

4040

41+
def test_sentrytrace_extraction_multiple_headers():
42+
sentrytrace_header = (
43+
"12312012123120121231201212312012-0415201309082013-1,"
44+
"12312012123120121231201212312012-0000000000000000-0"
45+
)
46+
assert extract_sentrytrace_data(sentrytrace_header) == {
47+
"trace_id": "12312012123120121231201212312012",
48+
"parent_span_id": "0415201309082013",
49+
"parent_sampled": True,
50+
}
51+
52+
53+
def test_sentrytrace_extraction_leading_empty_fragment():
54+
sentrytrace_header = ",12312012123120121231201212312012-0415201309082013-1"
55+
assert extract_sentrytrace_data(sentrytrace_header) == {
56+
"trace_id": "12312012123120121231201212312012",
57+
"parent_span_id": "0415201309082013",
58+
"parent_sampled": True,
59+
}
60+
61+
4162
def test_iter_headers(monkeypatch):
4263
monkeypatch.setattr(
4364
Transaction,

0 commit comments

Comments
 (0)