fix(replay): Fix network detail response body size being unknown for gzip-compressed responses#5592
Open
romtsn wants to merge 4 commits into
Open
fix(replay): Fix network detail response body size being unknown for gzip-compressed responses#5592romtsn wants to merge 4 commits into
romtsn wants to merge 4 commits into
Conversation
…Length is unknown For gzip-compressed responses, OkHttp strips the Content-Length header during transparent decompression, so response.body.contentLength() returns -1. This caused NetworkRequestData.responseBodySize to be unknown for replay network details. Add originalByteCount to NetworkBody, set it from the actual byte array in NetworkBodyParser.fromBytes, and use it as a fallback in NetworkDetailCaptureUtils when the passed bodySize is null or -1. This piggybacks on the existing peekBody call with no additional I/O. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
📲 Install BuildsAndroid
|
Contributor
Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 18c0bc2 | 306.73 ms | 349.77 ms | 43.03 ms |
| 0eaac1e | 316.82 ms | 357.34 ms | 40.52 ms |
| d15471f | 303.49 ms | 439.08 ms | 135.59 ms |
| fc5ccaf | 276.52 ms | 370.46 ms | 93.93 ms |
| e2dce0b | 308.96 ms | 360.10 ms | 51.14 ms |
| 5b1a06b | 352.27 ms | 413.70 ms | 61.43 ms |
| 37ec571 | 366.04 ms | 424.28 ms | 58.23 ms |
| 9fbb112 | 361.43 ms | 427.57 ms | 66.14 ms |
| bbc35bb | 324.88 ms | 425.73 ms | 100.85 ms |
| ff8eea4 | 313.42 ms | 337.08 ms | 23.66 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 18c0bc2 | 1.58 MiB | 2.13 MiB | 557.33 KiB |
| 0eaac1e | 1.58 MiB | 2.19 MiB | 619.17 KiB |
| d15471f | 1.58 MiB | 2.13 MiB | 559.54 KiB |
| fc5ccaf | 1.58 MiB | 2.13 MiB | 557.54 KiB |
| e2dce0b | 0 B | 0 B | 0 B |
| 5b1a06b | 0 B | 0 B | 0 B |
| 37ec571 | 0 B | 0 B | 0 B |
| 9fbb112 | 1.58 MiB | 2.11 MiB | 539.18 KiB |
| bbc35bb | 1.58 MiB | 2.12 MiB | 553.01 KiB |
| ff8eea4 | 1.58 MiB | 2.28 MiB | 718.64 KiB |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📜 Description
For gzip-compressed responses, OkHttp strips the
Content-Lengthheader during transparent decompression, soresponse.body.contentLength()returns-1. This causedNetworkRequestData.responseBodySizeto always be unknown for replay network details on such responses.This PR adds
originalByteCounttoNetworkBody, populated from the actual byte array length inNetworkBodyParser.fromBytes.NetworkDetailCaptureUtils.createRequestOrResponseInternalnow uses this as a fallback when the passedbodySizeisnullor-1.The fix piggybacks on the existing
peekBodycall — no additional network I/O. For responses larger than the peek limit (MAX_NETWORK_BODY_SIZE), the capped byte count is reported (lower bound) instead of unknown.Example replay: https://sentry-sdks.sentry.io/explore/replays/95bf32448ef94fafb41b5164ccde5d19
💡 Motivation and Context
Session replay network details show response body size. For gzip-compressed HTTP responses (common for JSON APIs), OkHttp's transparent decompression strips
Content-Length, making the size always unknown (-1). The Sentry UI shows "It is possible the network transfer size is smaller due to compression", so reporting the decompressed size is the correct behavior.Fixes SDK-1006
💚 How did you test it?
NetworkBodyParsercoveringoriginalByteCountfor both truncated and non-truncated bodiesNetworkDetailCaptureUtilscovering the bodySize fallback logic (unknown → uses byte count, explicit → preserved, body capture off → unchanged)📝 Checklist
sendDefaultPIIis enabled.🔮 Next steps