Encyclopédie des erreurs

Le corps de la réponse fetch dépasse la limite configurée

Angular produit cette erreur lorsque HttpClient utilise le backend fetch pendant le rendu côté serveur et que les octets mis en mémoire tampon pour le corps d'une réponse dépassent la limite maxResponseBodySize configurée. Par défaut, Angular limite chaque corps de réponse mis en mémoire tampon à 1 Mo pour éviter que le serveur ne mette en mémoire tampon des réponses anormalement volumineuses pendant le rendu.

Corriger l'erreur

Définissez maxResponseBodySize dans les options de provideServerRendering pour augmenter la limite :

import {provideServerRendering, withRoutes} from '@angular/ssr';
import {ApplicationConfig} from '@angular/core';
import {serverRoutes} from './app.routes.server';

const serverConfig: ApplicationConfig = {
  providers: [
    provideServerRendering(
      {
        maxResponseBodySize: 5 * 1024 * 1024, // 5MB
      },
      withRoutes(serverRoutes),
    ),
  ],
};

maxResponseBodySize configure le nombre maximal d'octets de corps de réponse qu'Angular met en mémoire tampon pour chaque requête HttpClient côté serveur utilisant le backend fetch. La valeur s'exprime en octets et s'applique globalement.

Important : Gardez cette limite aussi basse que votre application le permet. L'augmenter permet aux requêtes côté serveur de mettre en mémoire tampon des corps de réponse plus volumineux, ce qui peut accroître la consommation mémoire et le risque de déni de service. Privilégiez le déplacement des téléchargements volumineux en dehors du rendu côté serveur.

Déboguer l'erreur

Le message d'erreur inclut la limite maxResponseBodySize configurée, en octets. Pour identifier quelle requête HTTP renvoie une réponse volumineuse, consultez vos journaux réseau ou la console du serveur SSR pour trouver l'URL de la requête en échec.

Si la réponse volumineuse n'est nécessaire que côté client et n'est pas requise pour le rendu côté serveur, vous pouvez désactiver le transfer cache pour cette requête précise :

httpClient.get('/api/large-data', {transferCache: false});