Определение длины ответа из фильтра ISAPI - PullRequest
1 голос
/ 06 марта 2009

Я работаю над ISAPI-фильтром для удаления определенного содержимого из ответов. Мне нужно собрать все тело ответа перед выполнением обработки, поскольку содержимое, которое я удаляю, может перекрывать буферы отправки.

Для этого я бы хотел буферизовать содержимое ответа с каждым SF_NOTIFY_SEND_RAW_DATA уведомлением, пока я не доберусь до последнего, а затем отправить переведенные данные. Я хотел бы знать, как лучше определить, какой SF_NOTIFY_SEND_RAW_DATA является последним. Если я дождусь уведомления SF_NOTIFY_END_OF_REQUEST, то не знаю, как отправить буферизованные данные.

Одним из подходов будет использование длины контента. Это потребовало бы, чтобы я обнаружил конец заголовков. Это также потребовало бы предположения, что заголовок длины содержимого является правильным (это гарантировано?). Поскольку HTTP даже не требует заголовка длины содержимого, я даже не уверен, что он всегда будет там. Кажется, должен быть более легкий путь.

Я предполагаю, что ответ не разделен на части, поэтому я не обрабатываю разделение на части перед тем, как изменить ответ. Кроме того, когда я изменяю тело ответа, размер тела ответа не изменится, поэтому мне не нужно возвращаться и обновлять длину содержимого.

1 Ответ

1 голос
/ 06 марта 2009

В итоге я нашел несколько хороших обсуждений через 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

Фильтр, который у меня есть, буферизирует полный запрос в свой собственный буфер, затем использует SF_NOTIFY_END_OF_REQUEST для отправки содержимого. Его модификация не меняет размер и исключает возможность частичного отклика, поэтому в моем случае фильтр относительно прост.

...