2009-03-06 7 views
1

ISAPIフィルタを使用して、特定のコンテンツを応答から除外しています。私は処理を行う前に、応答の本文をすべて集める必要があります。取り除くコンテンツは送信バッファと重複する可能性があるためです。ISAPIフィルタからの応答長の決定

これを行うには、最後に到達するまで応答内容を各SF_NOTIFY_SEND_RAW_DATA通知でバッファリングしてから、翻訳されたデータを送信します。どのSF_NOTIFY_SEND_RAW_DATAが実際に最後であるかを判断する最良の方法を知りたいと思います。 SF_NOTIFY_END_OF_REQUEST通知まで待つと、バッファリングしたデータを送信する方法がわかりません。

1つのアプローチは、content-lengthを使用することです。これは私がヘッダーの終わりを検出する必要があります。また、コンテンツ長ヘッダーが正しいことを前提にする必要があります(これは保証されていますか?)。 HTTPはコンテンツの長さのヘッダーを必要としないので、私はそれが常にそこにあることさえも分かりません。簡単な方法があるはずです。

私は応答がチャンクされていないと仮定しているので、私は応答の変更を行う前にdechunkingを処理していません。また、レスポンスボディの変更を行うとレスポンスボディのサイズが変更されないため、戻ってコンテンツ長を更新する必要はありません。

答えて

1

私は最終的にGoogleを介していくつかの良い議論を発見した。

この記事は、私の質問に答えるだけでなく、より複雑なフィルタが対処しなければならない問題を提起:http://groups.google.com/group/microsoft.public.platformsdk.internet.server.isapi-dev/browse_thread/thread/85a5e75f342fad2b/cbb638f9a85c9e03?q=HTTP_FILTER_RAW_DATA&_done=%2Fgroups%3Fq%3DHTTP_FILTER_RAW_DATA%26start%3D20%26&_doneTitle=Back+to+Search&&d&pli=1

私はsがコンテンツを送信するためにSF_NOTIFY_END_OF_REQUESTを使用して、その後、独自のバッファに完全な要求をバッファリングしたフィルタを。それを変更してもサイズが変わることはなく、応答がチャンクされる可能性が排除されるため、私の場合はフィルタが比較的簡単です。

関連する問題