Skip to content

Fix Rack websocket upgrades for 0.2.27#26

Merged
wouterken merged 13 commits into
mainfrom
release/0.2.27.rc1
Jun 20, 2026
Merged

Fix Rack websocket upgrades for 0.2.27#26
wouterken merged 13 commits into
mainfrom
release/0.2.27.rc1

Conversation

@wouterken

Copy link
Copy Markdown
Owner

What changed

Fix Rack websocket upgrade handling for callable streaming bodies that return 101 Switching Protocols, and add a regression test using Async::WebSocket::Adapters::Rack under Rack::Lint.

Why it changed

Issue #25 exposed that Itsi handled upgrade responses correctly for explicit rack.hijack callbacks, but not for Rack apps that expose the upgrade path via a callable response body. That caused websocket adapters to receive an Itsi::HttpResponse instead of a bidirectional IO stream and fail during frame reads.

Impact

This makes websocket upgrade behavior conform better to modern Rack behavior and fixes the async websocket compatibility regression targeted for 0.2.27.

Root cause

For generic streaming bodies, rack_interface.rb always yielded the HTTP response writer. For 101 upgrade responses it must instead yield the partial hijack stream so the Rack adapter gets real bidirectional IO.

Validation

  • bundle exec ruby -Ilib:test test/rack/test_rack_server.rb in gems/server
  • bundle exec rake test in gems/server
  • root bundle exec rake test

Notes

This PR also suppresses expected bridge shutdown noise (BrokenPipe, reset/EOF-style shutdown cases) so normal websocket close paths do not emit misleading errors.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 20, 2026

Copy link
Copy Markdown

Deploying itsi with  Cloudflare Pages  Cloudflare Pages

Latest commit: 8c7889d
Status: ✅  Deploy successful!
Preview URL: https://d2ddd3ac.itsi.pages.dev
Branch Preview URL: https://release-0-2-27-rc1.itsi.pages.dev

View logs

Signed-off-by: Wouter Coppieters <wc@pico.net.nz>
@wouterken wouterken force-pushed the release/0.2.27.rc1 branch from 4ba402b to c9358c3 Compare June 20, 2026 00:45
@wouterken wouterken changed the title [codex] Fix Rack websocket upgrades for 0.2.27 Fix Rack websocket upgrades for 0.2.27 Jun 20, 2026
Signed-off-by: Wouter Coppieters <wc@pico.net.nz>
@wouterken wouterken marked this pull request as ready for review June 20, 2026 01:53
@wouterken wouterken merged commit 8c7889d into main Jun 20, 2026
39 checks passed
@wouterken wouterken deleted the release/0.2.27.rc1 branch June 20, 2026 11:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant