Я работаю над ISAPI-фильтром для удаления определенного содержимого из ответов. Мне нужно собрать все тело ответа перед выполнением обработки, поскольку содержимое, которое я удаляю, может перекрывать буферы отправки.
Для этого я бы хотел буферизовать содержимое ответа с каждым SF_NOTIFY_SEND_RAW_DATA
уведомлением, пока я не доберусь до последнего, а затем отправить переведенные данные. Я хотел бы знать, как лучше определить, какой SF_NOTIFY_SEND_RAW_DATA
является последним. Если я дождусь уведомления SF_NOTIFY_END_OF_REQUEST
, то не знаю, как отправить буферизованные данные.
Одним из подходов будет использование длины контента. Это потребовало бы, чтобы я обнаружил конец заголовков. Это также потребовало бы предположения, что заголовок длины содержимого является правильным (это гарантировано?). Поскольку HTTP даже не требует заголовка длины содержимого, я даже не уверен, что он всегда будет там. Кажется, должен быть более легкий путь.
Я предполагаю, что ответ не разделен на части, поэтому я не обрабатываю разделение на части перед тем, как изменить ответ. Кроме того, когда я изменяю тело ответа, размер тела ответа не изменится, поэтому мне не нужно возвращаться и обновлять длину содержимого.