<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/angular-22-quietly-replaced-xhr--here-s-what-actually-changes-for-you-part-5--7cj63ndaa" -->

---
title: Angular 22 Quietly Replaced XHR -Here’s What Actually...
description: Angular 22 switches HttpClient&#x27;s default backend from XMLHttpRequest to the native Fetch API. For most apps this requires zero code changes and brings benefits...
canonical: https://daily.dev/posts/angular-22-quietly-replaced-xhr--here-s-what-actually-changes-for-you-part-5--7cj63ndaa
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Angular 22 Quietly Replaced XHR -Here’s What Actually Changes For You (Part 5) | daily.dev
og:description: Angular 22 switches HttpClient&#x27;s default backend from XMLHttpRequest to the native Fetch API. For most apps this requires zero code changes and brings benefits...
og:url: https://daily.dev/posts/angular-22-quietly-replaced-xhr--here-s-what-actually-changes-for-you-part-5--7cj63ndaa
og:image: https://api.daily.dev/og/posts/7Cj63NdAa.png
og:image:alt: Angular 22 Quietly Replaced XHR -Here’s What Actually Changes For You (Part 5)
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Angular 22 Quietly Replaced XHR -Here’s What Actually Changes For You (Part 5)

**[JavaScript in Plain English](https://daily.dev/sources/jsPlainEnglish)** · 12 min read · 1 upvotes · 0 comments

## Summary

Angular 22 switches HttpClient's default backend from XMLHttpRequest to the native Fetch API. For most apps this requires zero code changes and brings benefits like better SSR compatibility, native streaming support, and improved service worker integration. The key breaking change is upload progress tracking: FetchBackend does not fire UploadProgress events, so apps relying on reportProgress must explicitly opt back into XHR using withXhr(). The post covers migration steps, a complete file upload service example using signals, unit testing considerations with HttpTestingController, and bonus tips around streaming large responses and service worker caching.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://javascript.plainenglish.io/angular-22-quietly-replaced-xhr-heres-what-actually-changes-for-you-part-5-23a8920cc167>

---

Tags: [#webdev](https://daily.dev/tags/webdev), [#angular](https://daily.dev/tags/angular)

[View this post on daily.dev](https://daily.dev/posts/angular-22-quietly-replaced-xhr--here-s-what-actually-changes-for-you-part-5--7cj63ndaa)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Angular 22 Quietly Replaced XHR -Here’s What Actually Changes For You (Part 5)","url":"https://daily.dev/posts/angular-22-quietly-replaced-xhr--here-s-what-actually-changes-for-you-part-5--7cj63ndaa","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/angular-22-quietly-replaced-xhr--here-s-what-actually-changes-for-you-part-5--7cj63ndaa"},"datePublished":"2026-07-21T01:47:39.532Z","dateModified":"2026-07-21T01:48:06.181Z","description":"Angular 22 switches HttpClient's default backend from XMLHttpRequest to the native Fetch API. For most apps this requires zero code changes and brings benefits...","image":"https://media.daily.dev/image/upload/s--foaA6JGU--/f_auto/v1722860399/public/Placeholder%2004","thumbnailUrl":"https://media.daily.dev/image/upload/s--foaA6JGU--/f_auto/v1722860399/public/Placeholder%2004","isAccessibleForFree":true,"articleSection":"JavaScript in Plain English","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"JavaScript in Plain English","logo":"https://media.daily.dev/image/upload/s--Dg5QTRuI--/f_auto,q_auto/v1686665538/logos/pe","url":"https://daily.dev/sources/jsPlainEnglish"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/angular-22-quietly-replaced-xhr--here-s-what-actually-changes-for-you-part-5--7cj63ndaa","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"webdev,angular","timeRequired":"PT12M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"JavaScript in Plain English","item":"https://daily.dev/sources/jsPlainEnglish"},{"@type":"ListItem","position":3,"name":"Angular 22 Quietly Replaced XHR -Here’s What Actually Changes For You (Part 5)"}]}
```

