| rfc9659v2.txt | rfc9659.txt | |||
|---|---|---|---|---|
| Internet Engineering Task Force (IETF) N. Jaju, Ed. | Internet Engineering Task Force (IETF) N. Jaju, Ed. | |||
| Request for Comments: 9659 Google | Request for Comments: 9659 Google | |||
| Updates: 8878 F. Handte, Ed. | Updates: 8878 W. F. Handte, Ed. | |||
| Category: Informational Meta Platforms, Inc. | Category: Informational Meta Platforms, Inc. | |||
| ISSN: 2070-1721 September 2024 | ISSN: 2070-1721 September 2024 | |||
| Window Sizing for Zstandard Content Encoding | Window Sizing for Zstandard Content Encoding | |||
| Abstract | Abstract | |||
| Deployments of Zstandard, or "zstd", can use different window sizes | Deployments of Zstandard, or "zstd", can use different window sizes | |||
| to limit memory usage during compression and decompression. Some | to limit memory usage during compression and decompression. Some | |||
| browsers and user agents limit window sizes to mitigate memory usage | browsers and user agents limit window sizes to mitigate memory usage | |||
| skipping to change at line 75 ¶ | skipping to change at line 75 ¶ | |||
| compression mechanism similar to gzip. When used with HTTP, the | compression mechanism similar to gzip. When used with HTTP, the | |||
| "zstd" content coding token signals to the decoder that the content | "zstd" content coding token signals to the decoder that the content | |||
| is Zstandard-compressed. | is Zstandard-compressed. | |||
| An important property of Zstandard-compressed content is its | An important property of Zstandard-compressed content is its | |||
| Window_Size ([RFC8878], Section 3.1.1.1.2), which describes the | Window_Size ([RFC8878], Section 3.1.1.1.2), which describes the | |||
| maximum distance for back-references and therefore how much of the | maximum distance for back-references and therefore how much of the | |||
| content must be kept in memory during decompression. | content must be kept in memory during decompression. | |||
| The minimum Window_Size is 1 KB. The maximum Window_Size is (1<<41) | The minimum Window_Size is 1 KB. The maximum Window_Size is (1<<41) | |||
| + 7*(1<<38) bytes, which is 3.75 TB. Larger Window_Size values tend | + 7*(1<<38) bytes, where "<<" denotes a bitwise left shift, which is | |||
| to improve the compression ratio but at the cost of increased memory | 3.75 TB. Larger Window_Size values tend to improve the compression | |||
| usage. | ratio but at the cost of increased memory usage. | |||
| To protect against unreasonable memory usage, some browsers and user | To protect against unreasonable memory usage, some browsers and user | |||
| agents limit the maximum Window_Size they will handle. This causes | agents limit the maximum Window_Size they will handle. This causes | |||
| failures to decode responses when the content is compressed with a | failures to decode responses when the content is compressed with a | |||
| larger Window_Size than the recipient allows, leading to decreased | larger Window_Size than the recipient allows, leading to decreased | |||
| interoperability. | interoperability. | |||
| [RFC8878], Section 3.1.1.1.2 recommends that decoders support a | [RFC8878], Section 3.1.1.1.2 recommends that decoders support a | |||
| Window_Size of up to 8 MB, and that encoders not generate frames | Window_Size of up to 8 MB, and that encoders not generate frames | |||
| using a Window_Size larger than 8 MB. However, it imposes no | using a Window_Size larger than 8 MB. However, it imposes no | |||
| End of changes. 2 change blocks. | ||||
| 4 lines changed or deleted | 4 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||