At the moment, node-fetch behavior regarding Response.statusText differs from the fetch specification and native browser implementations.
If the server does not respond with status text, node-fetch incorrectly sets a default message derived from the HTTP status code. I think that happens here:
https://github.com/bitinn/node-fetch/blob/v2.3.0/src/response.js#L34
In fact, for HTTP/2 connections the statusText should always be blank because HTTP/2 doesn't support it:
https://fetch.spec.whatwg.org/#concept-response-status-message
Why does this matter, other than spec compliance? If your server side rendered app displays a fetch error statusText that technically should not exist, you end up with the client render (and fetch) producing a correct result that's different:

At the moment,
node-fetchbehavior regardingResponse.statusTextdiffers from thefetchspecification and native browser implementations.If the server does not respond with status text,
node-fetchincorrectly sets a default message derived from the HTTP status code. I think that happens here:https://github.com/bitinn/node-fetch/blob/v2.3.0/src/response.js#L34
In fact, for HTTP/2 connections the
statusTextshould always be blank because HTTP/2 doesn't support it:https://fetch.spec.whatwg.org/#concept-response-status-message
Why does this matter, other than spec compliance? If your server side rendered app displays a
fetcherrorstatusTextthat technically should not exist, you end up with the client render (andfetch) producing a correct result that's different: