錯誤百科

Fetch 回應主體超過設定的上限

當 HttpClient 在伺服器端渲染期間使用 fetch 後端,且某個回應主體被緩衝的位元組數超過設定的 maxResponseBodySize 上限時,Angular 就會產生這個錯誤。Angular 預設會把每個被緩衝的回應主體限制在 1 MB 以內,避免伺服器在渲染期間緩衝意外龐大的回應。

如何修復

在 provideServerRendering 的選項中設定 maxResponseBodySize,以提高上限:

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 設定的是:對於使用 fetch 後端的伺服器端 HttpClient 請求,Angular 為每個請求緩衝的回應主體位元組數上限。這個值以位元組為單位設定,且全域適用。

IMPORTANT: 把這個上限維持在你的應用程式所能允許的最小值。提高上限會讓伺服器端請求緩衝更大的回應主體,可能增加記憶體用量與阻斷服務攻擊的風險。請優先將大型下載移到伺服器端渲染之外處理。

如何除錯

錯誤訊息包含設定的 maxResponseBodySize 上限(以位元組為單位)。若要找出是哪個 HTTP 請求回傳了龐大的回應,請查看你的網路記錄,或 SSR 伺服器主控台中失敗請求的 URL。

如果龐大的回應只在用戶端需要、伺服器端渲染用不到,你可以針對該特定請求停用傳輸快取:

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