範囲プロトコルは RFC2616 仕様で定義されており、クライアントが 1 回のリクエストで完全なファイルの一部のみをダウンロードできるようにするルールを提供し、クライアントがマルチスレッドを有効にしながらファイルをダウンロードできるようにします。スレッドはファイルの一部のみをダウンロードし、最終的にそれを完全なファイルに結合します。クライアントがファイルのダウンロードされた部分のオフセットを記録している限り、後でコンテンツを送信するようにサーバーに要求できます。ブレークポイントからのファイル。
範囲プロトコルは主にいくつかの HTTP ヘッダー処理プロセスとファイル送信時のオフセット処理を追加するため、Nginx は範囲プロトコルを非常によくサポートしています。 Nginx は、多くの HTTP フィルタリング モジュールで処理できる HTTP フィルタリング モジュールを設計しました。 http_range_header_filter モジュールは、HTTP リクエスト ヘッダーの範囲部分を処理し、最終的にユーザーに通知します。 HTTP 応答を送信する前に、パッケージ本体の生成時に ngx_http_range_body_filter_module モジュールが呼び出され、範囲プロトコルに従ってファイルを指す ngx_buf_t バッファの file_pos および file_last メンバーが変更されます。ファイルの内容をクライアントに送信します。
実際、範囲プロトコルのサポートは非常に簡単です。送信する前に ngx_http_request_t メンバーのallow_ranges 変数を 1 に設定するだけで、残りは HTTP フレームワークによって完了します。例:
r->allow_ranges = 1;
このようにして、マルチスレッドのダウンロードとダウンロードの再開がサポートされます。