whatwg/fetch

API for receiving interim responses (including early hints)

jasnell opened this issue · 2 comments

What problem are you trying to solve?

Early hints (103 responses) are not the only kind of interim response the http spec allows for. It would be ideal for fetch to provide a means of receiving and processing interim responses.

What solutions exist today?

For fetch, none.

How would you solve it?

Define a new InterimResponse dictionary:

dictionary InterimResponse {
  unsigned short status;
  ByteString statusText;
  USVString url;
  Headers headers;
}

Define a new FetchPromise that extends Promise<Response> and implements Symbol.asyncIterator, returning an AsyncIterable of InterimResponses. The fetch() method would return this new FetchPromise, allowing, for example:

const fetchPromise = fetch('https://...');  // note no await

for await (const interimResponse of fetchPromise) {
  // process the interim response
}

const resp = await fetchPromise;

Anything else?

Original discussion for this mechanism here: https://docs.google.com/document/d/1P4MskkFd3HHFPGDr01O3wdFXukmX9i0jAb5uh9v9x8Q/edit

annevk commented

#607 is the solution I had in mind for this. In combination with events.

Hmm... my key concern there is that #607 (and the whole observer/events model) just feels unnecessarily overweighted for this. I could certainly be convinced otherwise, tho as FetchObserver would certainly help with other use cases.