- more complicated API, request and response concepts are mixed together.
- lacks streaming, whole response is going to buffer in memory, not available for binary data
- more pleasant simpler API. Has Request and Response abstractions, can be used separately (for example in ServiceWorkers). Based on Promises.
- supports streaming, response.body is ReadableStream, you can read data chunk by chunk without buffering, available for binary data. Can access partial content while response is being received.
- has cache control support (default, no-store, reload, no-cache, force-cache, only-if-cached)