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