Как связать запрос в расширении ISAPI с ответом в фильтре ISAPI?
Я создаю своего рода http sniffer для IIS6, для этого я использую как фильтр ISAPI, так и расширение ISAPI. Расширение - прочитать запрос. Фильтр - чтобы прочитать ответ.
Причина, по которой я использую расширение, заключается в том, что я не хочу заставлять пользователя переходить в режим совместимости IIS5 и поэтому не могу подписаться на SF_NOTIFY_READ_RAW_DATA.
Дело в том, что когда я читаю ответ, я хочу связать его с запросом, поэтому мне нужно дать уникальный идентификатор запросу и использовать его при чтении ответа.
Я читал, что раньше была возможность вызвать Serve rSupportFunction с SF_REQ_GET_CONNID, но это не поддерживается в IIS6.
Также я прочитал, что возможное решение - добавить заголовок клиента, а затем удалить его - это, вероятно, сработает, но выглядит менее элегантно, чем я надеялся реализовать.
Есть ли способ получить идентификатор фильтра (connID в EXTENSION_CONTROL_BLOCK) в фильтре?
цените ваш ответ, Сагив
1 ответ
У меня была такая же проблема несколько месяцев назад.
Я сделал следующее, чтобы решить проблему:
- На HttpFilterProc (фильтр ISAPI) я искал уведомление SF_NOTIFY_PREPROC_HEADERS.
- Затем я ввел свой собственный заголовок с GUID для запроса.
- На HttpExtensionProc (расширение ISAPI) я читаю свой заголовок и извлекаю GUID.
- Затем я прочитал содержание запроса и связал его с GUID.
- На OnSendRawData (ISAPI Filter) я читаю содержимое чанкованного ответа и снова подключаю его с GUID.
Таким образом, я связываю и содержимое запроса (из Расширения), и содержимое ответа (из фильтра)!