フラグメント キャッシュ

HTTP サーバー API は、HTTP 応答を迅速に形成するために使用するために、データ フラグメントをキャッシュに格納する機能をユーザーに提供します。

フラグメントは、HttpAddFragmentToCache 関数を呼び出すことによってキャッシュに追加できます。 フラグメントは、pUrlPrefix パラメーターに含まれる URL によって識別されます。 既存のフラグメントの URL を使用してこの関数を呼び出すと、既存のフラグメントが上書きされます。

フラグメントは、最初にフラグメントを追加した要求キューの所有者によって削除または上書きできます。 UrlPrefix で呼び出された HttpFlushResponseCache 関数は、そのプレフィックス内のすべてのフラグメントと、その UrlPrefix の階層的子孫を削除します。 HttpReadFragmentFromCache 関数は、フラグメント全体またはフラグメント内の指定されたバイト範囲を読み取ります。

手記

フラグメントをキャッシュに追加しても、今後の呼び出しで応答を送信できる保証はありません。 フラグメント キャッシュ エントリはいつでも使用できなくなります。 使用できないフラグメントを使用する呼び出しは失敗します。 フラグメント キャッシュを使用するアプリケーションは、このエラーを処理するために準備する必要があります。

 

フラグメントを使用した応答の送信

フラグメントは、HTTP 応答エンティティ本体のすべてまたは一部を形成するために使用できます。 HTTP_RESPONSE 構造体で HTTP_DATA_CHUNK 構造体の配列を指定することで、HttpSendHttpResponse 関数を 1 回の呼び出しで応答とエンティティ本文を送信できます。

HTTP_DATA_CHUNK では、メモリ ブロック、既に開いているファイルへのハンドル、またはフラグメント キャッシュ エントリを指定できます。 これらは、HttpDataChunkFromMemoryHttpDataChunkFromFileHandle、および httpDataChunkFromFragmentCache HTTP_DATA_CHUNK の種類に対応します。 HTTP キャッシュ内の完全な応答は、HTTP_RESPONSE 構造体のフラグメントとして使用することもできますが、この方法はお勧めしません。

HTTP_RESPONSE 構造体には、応答のエンティティ本体を構成する HTTP_DATA_CHUNK 構造体の配列へのポインターが含まれています。 HTTP_RESPONSE 構造体には、HTTP_DATA_CHUNK 構造体の配列の次元を指定する一致するカウントも含まれています。 HTTP_DATA_CHUNK 構造体の HttpDataChunkFromFragmentCache 値は、データ チャンクのフラグメント キャッシュの種類を指定します。 HTTP_DATA_CHUNK 構造体では、フラグメント名も指定します。

キャッシュされたフラグメントを含む応答は、フラグメント キャッシュ エントリのいずれかが使用できない場合、ERROR_PATH_NOT_FOUNDで失敗します。 フラグメント キャッシュ エントリは使用できる保証がないため、このケースを処理するためにアプリケーションを準備する必要があります。 このケースを処理する 1 つの方法は、フラグメント キャッシュ エントリを再追加し、応答を再送信することです。 繰り返しエラーが発生した場合、アプリケーションはフラグメント キャッシュ エントリの代わりにメモリ バッファーに格納されているデータ チャンクを使用できます。

フラグメント キャッシュ エントリは、HttpSendResponseEntityBody 関数でも指定できます。 フラグメントは、前述のように、HTTP_DATA_CHUNK 構造体のエンティティ本体に追加されます。 繰り返しになりますが、指定されたフラグメント キャッシュ エントリのいずれかが使用できない場合、送信は失敗する可能性があります。