dotnet/runtime

[browser][wasm] Request Streaming upload via http handler

kjpou1 opened this issue · 6 comments

During the initial review of the browser wasm code integration it was brought to the attention that the request content may not be sufficient in its current state.

There needs to be more investigation into whether there is a way to stream the request content. The issue being that not being able to handle this scenario may result in the buffering of huge amounts of data is some scenarios.

These scenarios need to be identified and solution coded if there is a way to achieve this using the browser API.

Initial investigation leads to some sort of wrapping the javascript Streams API and exposing it in some way via .NET stream.

Model being:

fetch('/', {
  method: 'POST', 
  body: new ReadableStream({
    pull: function(controller) {
      console.log('pull called!');
      controller.enqueue('Some data...');
    }
  })
});

Right now this does not seem to work as per the discussion here: whatwg/fetch#425 (comment)

As well as multiple issues outstanding.

Also to keep in mind the streaming API is still marked experimental in the documentation.

Tagging subscribers to this area: @dotnet/ncl
Notify danmosemsft if you want to be subscribed.

@pavelsavara ... I'm in the process of adding remarks to the Blazor WASM File uploads topic to alert readers to the limitation of the current BrowserHttpHandler implementation for large file uploads.

Pavel, I'll ping you as a reviewer, as I have a question about this issue cross-link in the new text. The PR will be up on Monday, 2/6.

@guardrex streaming HTTP is still not supported by browsers as far as I could tell.

See https://chromestatus.com/feature/5274139738767360

It is supported by Chrome / Edge (https://developer.chrome.com/articles/fetch-streaming-requests/) but not by Firefox (mozilla/standards-positions#663) or Safari (WebKit/standards-positions#24)

Thanks @campersau!

We could possibly implement it and hide it behind option similar to WebAssemblyEnableStreamingResponse we already have.
@lewing Do you see this is as Net8 priority ?