{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreiavqc4ogyvtbiyyp3f4aa6r6xtmr3nmohsbfuv5nyp33i2ix4ob5u",
"uri": "at://did:plc:kfvfl6lsmxg64yzszmfotdq2/app.bsky.feed.post/3mohagfdracs2"
},
"path": "/t/ruby-talk-444836-ann-http-2-1-2-0-released/76787#post_1",
"publishedAt": "2026-06-16T13:26:36.000Z",
"site": "https://rubytalk.org",
"tags": [
"github.com",
"GitHub - igrigorik/http-2: Pure Ruby implementation of HTTP/2 protocol",
"HTTP: HTTP/2 - High Performance Browser Networking (O'Reilly)",
"Processing http-2-1.2.0",
"RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)",
"RFC 7541 - HPACK: Header Compression for HTTP/2"
],
"textContent": "http-2 1.1.0 has been released.\n\ngithub.com\n\n### GitHub - igrigorik/http-2: Pure Ruby implementation of HTTP/2 protocol\n\nPure Ruby implementation of HTTP/2 protocol\n\nPure Ruby, framework and transport agnostic, implementation of HTTP/2\nprotocol and HPACK header compression with support for:\n\n* [Binary framing](HTTP: HTTP/2 - High Performance Browser Networking (O'Reilly)) parsing and\nencoding\n* [Stream multiplexing](HTTP: HTTP/2 - High Performance Browser Networking (O'Reilly))\nand [prioritization](HTTP: HTTP/2 - High Performance Browser Networking (O'Reilly))\n* Connection and stream [flow control](HTTP: HTTP/2 - High Performance Browser Networking (O'Reilly))\n* [Header compression](HTTP: HTTP/2 - High Performance Browser Networking (O'Reilly)) and\n[server push](HTTP: HTTP/2 - High Performance Browser Networking (O'Reilly))\n* Connection and stream management\n* And more... see [API docs](Processing http-2-1.2.0)\n\nProtocol specifications:\n\n* [Hypertext Transfer Protocol Version 2 (RFC 7540)](\nRFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2))\n* [HPACK: Header Compression for HTTP/2 (RFC 7541)](\nRFC 7541 - HPACK: Header Compression for HTTP/2)\n\nHere are the updates since the last release:\n\n## 1.2.0\n\n### Improvements\n\nA lot of optimizations around reducing allocated objects, avoiding\nexpensive frequent operations, and simpler data structures. A few\nhighlights:\n\n* precompute huffman padding bytes.\n* use `String#bytesplice` (when available) to save an intermediate string\nin buffer ops.\n* bookkeep header dynamic table offsets to improve lookups.\n* streams recently closed: use `Hash#delete_if` with early break instead of\n`Hash#delete_while` to avoid intermediate hash.\n* Store frame flags as integers instead of arrays of symbols in frame\nhashes.\n* NOTE: while frame hashes are an internal representation, they get\nexposed via `:frame_received` or `:frame_sent` callbacks. in case you're\nrelying on the `:flags` field, you'll have to adapt your code accordingly.\n\n## 1.1.3\n\nHTTP2::FrameBuffer#clear: clears the buffered data chunks\n\nthis API is useful for clients which want to react to a peer GOAWAY frame\nby cleaning the buffer before closing the stream\n\n## 1.1.2\n\n* allow sending and receiving multiple GOAWAY frames, as per RFC 9113,\nsection 6.8\n\n## 1.1.1\n\n### Bugfixes\n\n* frame buffer was accidentally changing encoding before header packing,\nwhich raise invalid compatible encoding errors, due to usage of \"String#\".\nthis was fixed by using internal `append_str“, which does not touch\nencoding, and calling `String.force_encoding` in case the buffer is a\nmutable string passed by the user.\n* dup PING frame payload passed by the user; while not really resulting in\ninvalid encoding, the change of the input string could surprise the caller,\nsince this would be expected to be stored somewhere so the peer PING frame\ncan be matched on receive.\n\n### Improvements\n\nSimplified `String#transition`, making sure it only does state machine\ntransitions (the rest is handled outside of it).",
"title": "[ruby-talk:444836] [ANN] http-2 1.2.0 released"
}