HTTPのボディってどれだけ文字列を持てるの? 拡張はできる? あまりに長すぎる場合ってどうするの? |
| |
HTTPのボディサイズに理論上の上限はあるの?実は、HTTPの仕様自体には「ボディは最大○MBまで」という厳しい上限はありません。 例えばHTTP/1.1では、 のように、非常に大きな値を指定できます。 理論上は数GB、数十GB、さらに大きなデータも送れます。 実際の上限はどこで決まる?現実にはHTTP仕様ではなく、途中の機器やソフトウェアが制限しています。 例えば:
などです。 AWSでもサービスごとに制限があります。 例えばAPI Gatewayは比較的小さいサイズ制限がありますし、ALBやCloudFrontにも関連する制限があります。 上限は拡張できる?ケースによります。 例えばNginxなら、 のように設定を変更できます。 つまり、 「HTTPの上限を拡張する」のではなく、受信側の制限を緩和する という考え方です。 では何GBものデータを送るときは?通常は1回の巨大なHTTPリクエストにしません。 方法1: ストリーミングHTTP/1.1のChunked Transfer Encodingや、HTTP/2のストリームを利用します。 という形です。 受信側は全部揃う前から処理できます。 方法2: マルチパートアップロード大容量ファイルではこちらが一般的です。 例えば5GBのファイルを、 に分割して送信します。 S3のMultipart Uploadが有名です。 メリット:
方法3: オブジェクトストレージを使う最近のクラウドでは、 が定番です。 アプリサーバを経由しません。 数GB〜数TB級のデータならこちらが普通です。 長い文字列(JSONなど)の場合は?例えば数十MB〜数百MBのJSONを送ることは可能ですが、あまり推奨されません。 理由:
その場合は、
などを検討します。 オンプレの感覚でいうとHTTPボディは、 TCPの上に乗るデータ領域 です。 TCPがパケットに分割して運んでくれるので、 アプリケーションは巨大なデータを1つの論理的なボディとして扱えます。 ただし実際には、
ことが多いです。 まとめ
実務では、「HTTPボディをどこまで大きくできるか」よりも、「巨大データをどう分割・転送するか」を考えることの方が重要です。 |
|
|

この記事へのコメント