|
58 | 58 | import java.util.HashMap; |
59 | 59 | import java.util.HashSet; |
60 | 60 | import java.util.List; |
| 61 | +import java.util.Locale; |
61 | 62 | import java.util.Map; |
62 | 63 | import java.util.Set; |
63 | 64 | import java.util.concurrent.ConcurrentHashMap; |
@@ -358,7 +359,7 @@ private Flow<Void> onHttpClientRequest(RequestContext ctx_, HttpClientRequest re |
358 | 359 | new MapDataBundle.Builder(CAPACITY_3_4) |
359 | 360 | .add(KnownAddresses.IO_NET_URL, request.getUrl()) |
360 | 361 | .add(KnownAddresses.IO_NET_REQUEST_METHOD, request.getMethod()) |
361 | | - .add(KnownAddresses.IO_NET_REQUEST_HEADERS, request.getHeaders()); |
| 362 | + .add(KnownAddresses.IO_NET_REQUEST_HEADERS, toLowerCaseHeaders(request.getHeaders())); |
362 | 363 |
|
363 | 364 | if (downstreamSampler().isSampled(ctx, request.getRequestId())) { |
364 | 365 | final Object body = parseHttpClientBody(ctx, request); |
@@ -398,7 +399,7 @@ private Flow<Void> onHttpClientResponse(RequestContext ctx_, HttpClientResponse |
398 | 399 | final MapDataBundle.Builder bundleBuilder = |
399 | 400 | new MapDataBundle.Builder(CAPACITY_3_4) |
400 | 401 | .add(KnownAddresses.IO_NET_RESPONSE_STATUS, Integer.toString(response.getStatus())) |
401 | | - .add(KnownAddresses.IO_NET_RESPONSE_HEADERS, response.getHeaders()); |
| 402 | + .add(KnownAddresses.IO_NET_RESPONSE_HEADERS, toLowerCaseHeaders(response.getHeaders())); |
402 | 403 | // ignore the response if not sampled |
403 | 404 | if (downstreamSampler().isSampled(ctx, response.getRequestId())) { |
404 | 405 | final Object body = parseHttpClientBody(ctx, response); |
@@ -429,6 +430,19 @@ private Flow<Void> onHttpClientResponse(RequestContext ctx_, HttpClientResponse |
429 | 430 | } |
430 | 431 | } |
431 | 432 |
|
| 433 | + private Map<String, List<String>> toLowerCaseHeaders(final Map<String, List<String>> headers) { |
| 434 | + if (headers == null || headers.isEmpty()) { |
| 435 | + return headers; |
| 436 | + } |
| 437 | + final Map<String, List<String>> result = new HashMap<>(headers.size()); |
| 438 | + for (final Map.Entry<String, List<String>> entry : headers.entrySet()) { |
| 439 | + final String key = entry.getKey(); |
| 440 | + final List<String> value = entry.getValue(); |
| 441 | + result.put(key == null ? null : key.toLowerCase(Locale.ROOT), value); |
| 442 | + } |
| 443 | + return result; |
| 444 | + } |
| 445 | + |
432 | 446 | private Object parseHttpClientBody( |
433 | 447 | final AppSecRequestContext ctx, final HttpClientPayload payload) { |
434 | 448 | if (payload.getContentType() == null || payload.getBody() == null) { |
|
0 commit comments