oven-sh / bun

Incredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one
https://bun.sh
Other
74.35k stars 2.78k forks source link

Bun serve with a Response with empty ReadableStream won't redirect. #15320

Open adrifer opened 9 hours ago

adrifer commented 9 hours ago

What version of Bun is running?

1.1.36+ededc168c

What platform is your computer?

Microsoft Windows NT 10.0.22631.0 x64

What steps can reproduce the bug?

Run this code:

Bun.serve({
    port: process.env.NITRO_PORT || process.env.PORT || 3e3,
    websocket: void 0,
    async fetch(req, server2) {
      const url = new URL(req.url);
      if(url.pathname === "/redirect") {
          const emptyStream = new ReadableStream({
            start(controller) {
              // Immediately close the stream to make it empty
              controller.close();
            }
          });

          return new Response(emptyStream, {
            status: 307,
            headers: {
                location: "/"
            }
          });
    }

    return new Response("Hello world");
    }
  });
  1. navigate to localhost:3000/redirect

Nothing will happen, the response the browser receives is empty (no headers or body) and no redirect.

What is the expected behavior?

It should redirect to / and show Hello world in the browser.

What do you see instead?

White screen, because the response contains no body or headers.

Additional information

No response

adrifer commented 9 hours ago

As context, this breaks new TanStack Starts framework, basically when using Bun all redirects will do nothing and an empty page will be rendered. https://github.com/TanStack/router/issues/2819