proxyClientMaxBodySize
この機能は現在実験的であり、変更される可能性があります。本番環境での使用は推奨されません。お試しいただき、GitHubでフィードバックをお寄せください。
プロキシが使用される場合、Next.jsはリクエストボディを自動的にクローンし、メモリにバッファリングすることで、プロキシと基盤となるルートハンドラーの両方で複数回読み込めるようにします。メモリ使用量の過剰を防ぐため、この設定オプションはバッファリングされるボディのサイズ制限を設定します。
デフォルトでは、最大ボディサイズは10MBです。リクエストボディがこの制限を超えた場合、ボディは制限までのみバッファリングされ、どのルートが制限を超えたかを示す警告がログに記録されます。
オプション
文字列形式(推奨)
人間が読める文字列形式でサイズを指定します。
next.config.ts
import type { NextConfig } from 'next'
const nextConfig: NextConfig = {
experimental: {
proxyClientMaxBodySize: '1mb',
},
}
export default nextConfigサポートされている単位: b、kb、mb、gb
数値形式
または、バイト単位で数値を指定します。
next.config.ts
import type { NextConfig } from 'next'
const nextConfig: NextConfig = {
experimental: {
proxyClientMaxBodySize: 1048576, // 1MB in bytes
},
}
export default nextConfig動作
リクエストボディが設定された制限を超えた場合
- Next.jsは、最初のNバイト(制限まで)のみをバッファリングします。
- 制限を超えたルートを示す警告がコンソールにログ記録されます。
- リクエストは通常どおり処理を続行しますが、部分的なボディのみが利用可能になります。
- クライアントにエラーが返されたり、リクエストが失敗したりすることはありません。
アプリケーションで完全なリクエストボディを処理する必要がある場合は、次のいずれかを行う必要があります。
proxyClientMaxBodySize制限を増やす- アプリケーションロジックで部分的なボディを適切に処理する
例
proxy.ts
import { NextRequest, NextResponse } from 'next/server'
export async function proxy(request: NextRequest) {
// Next.js automatically buffers the body with the configured size limit
// You can read the body in proxy...
const body = await request.text()
// If the body exceeded the limit, only partial data will be available
console.log('Body size:', body.length)
return NextResponse.next()
}app/api/upload/route.ts
import { NextRequest, NextResponse } from 'next/server'
export async function POST(request: NextRequest) {
// ...and the body is still available in your route handler
const body = await request.text()
console.log('Body in route handler:', body.length)
return NextResponse.json({ received: body.length })
}Good to know
- この設定は、プロキシがアプリケーションで使用されている場合にのみ適用されます。
- デフォルトの10MBの制限は、メモリ使用量と一般的なユースケースのバランスをとるように設計されています。
- 制限は、すべての同時リクエスト全体ではなく、リクエストごとに適用されます。
- 大きなファイルをアップロードするアプリケーションの場合は、それに応じて制限を増やすことを検討してください。
役に立ちましたか?