HTTPのボディってどれだけ文字列を持てるの?

flyd-OLRXnzXFBjo-unsplash.jpg

質問

HTTPのボディってどれだけ文字列を持てるの?
拡張はできる?
あまりに長すぎる場合ってどうするの?


Learning HTTP/2 A Practical Guide for Beginners【電子書籍】[ Stephen Ludin ]

価格:1989円
(2026/6/20 17:38時点)
感想(0件)


解答

HTTPのボディサイズに理論上の上限はあるの?

実は、HTTPの仕様自体には「ボディは最大○MBまで」という厳しい上限はありません。

例えばHTTP/1.1では、

POST /upload HTTP/1.1Content-Length: 1000000000

のように、非常に大きな値を指定できます。

理論上は数GB、数十GB、さらに大きなデータも送れます。


実際の上限はどこで決まる?

現実にはHTTP仕様ではなく、途中の機器やソフトウェアが制限しています。

例えば:

  • Webサーバ(Nginx、Apache)

  • アプリケーションサーバ

  • ロードバランサ

  • API Gateway

  • ブラウザ

  • メモリ容量

などです。

AWSでもサービスごとに制限があります。

例えばAPI Gatewayは比較的小さいサイズ制限がありますし、ALBやCloudFrontにも関連する制限があります。


上限は拡張できる?

ケースによります。

例えばNginxなら、

client_max_body_size 100M;

のように設定を変更できます。

つまり、

「HTTPの上限を拡張する」のではなく、受信側の制限を緩和する

という考え方です。


では何GBものデータを送るときは?

通常は1回の巨大なHTTPリクエストにしません。

方法1: ストリーミング

HTTP/1.1のChunked Transfer Encodingや、HTTP/2のストリームを利用します。

送信開始 ↓一部送信 ↓一部送信 ↓一部送信 ↓終了

という形です。

受信側は全部揃う前から処理できます。


方法2: マルチパートアップロード

大容量ファイルではこちらが一般的です。

例えば5GBのファイルを、

1GB1GB1GB1GB1GB

に分割して送信します。

S3のMultipart Uploadが有名です。

メリット:

  • 途中で失敗しても再送は一部だけ

  • 並列送信できる

  • メモリを圧迫しない


方法3: オブジェクトストレージを使う

最近のクラウドでは、

クライアント ↓直接S3へアップロード

が定番です。

アプリサーバを経由しません。

数GB〜数TB級のデータならこちらが普通です。


長い文字列(JSONなど)の場合は?

例えば数十MB〜数百MBのJSONを送ることは可能ですが、あまり推奨されません。

理由:

  • パースが重い

  • メモリ消費が大きい

  • タイムアウトしやすい

その場合は、

  • ページング

  • 分割送信

  • NDJSON

  • ストリーミング

などを検討します。


オンプレの感覚でいうと

HTTPボディは、

TCPの上に乗るデータ領域

です。

TCPがパケットに分割して運んでくれるので、

アプリケーションは巨大なデータを1つの論理的なボディとして扱えます。

ただし実際には、

「どこかの機器やソフトが先に悲鳴を上げる」

ことが多いです。


まとめ

  • HTTP仕様自体には実質的なボディサイズ上限はない

  • 実際の制限はWebサーバやミドルウェアが決める

  • 設定変更で上限を上げられる場合が多い

  • 数GB以上ならストリーミングやマルチパートアップロードが一般的

  • 巨大データはアプリサーバ経由ではなく、オブジェクトストレージへ直接送ることが多い

実務では、「HTTPボディをどこまで大きくできるか」よりも、「巨大データをどう分割・転送するか」を考えることの方が重要です。



ゼロトラストセキュリティ実践ガイド

価格:3300円
(2025/5/26 11:05時点)
感想(0件)


【 おもしろ プレゼント 】 おもしろtシャツ 俺流総本家 魂心Tシャツ バカ【 tシャツ 長袖 メンズ レディース 名言 文字 メッセージtシャツおもしろ雑貨 文字tシャツ 面白いtシャツ 入り 長袖 半袖 誕生日 日本 プレゼント 恋愛・結婚・合コン】

価格:2480円~
(2025/9/27 12:10時点)
感想(1件)


 



この記事へのコメント