2009-03-06 2 views
1

ISAPI 필터를 사용하여 응답에서 특정 콘텐츠를 제거합니다. 처리하기 전에 응답의 모든 본문을 수집해야합니다. 스트립하는 내용이 버퍼를 오버랩 할 수 있습니다.ISAPI 필터에서 응답 길이 결정

이렇게하려면 마지막으로 갈 때까지 각 SF_NOTIFY_SEND_RAW_DATA 알림 내용을 버퍼링하고 싶습니다. 그런 다음 번역 된 데이터를 보냅니다. 어떤 SF_NOTIFY_SEND_RAW_DATA이 실제로 마지막인지 판단하는 가장 좋은 방법을 알고 싶습니다. SF_NOTIFY_END_OF_REQUEST 알림이 오기 전까지는 버퍼링 한 데이터를 보내는 방법을 알지 못합니다.

한 가지 방법은 content-length를 사용하는 것입니다. 이것은 헤더의 끝을 감지해야합니다. 또한 content-length 헤더가 맞다고 가정 할 필요가 있습니다 (보장됩니까?). HTTP는 심지어 content-length 헤더를 필요로하지 않기 때문에, 항상 거기에 있을지 확신하지 못합니다. 더 쉬운 방법이 있어야하는 것처럼 보입니다.

응답이 청크가 아니라고 가정하므로 응답 변경을 수행하기 전에 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

나는의 다음 내용을 보낼 SF_NOTIFY_END_OF_REQUEST를 사용하여 자신의 버퍼에 전체 요청을 버퍼링이 필터를 :

이 게시물은 문제를 제기뿐만 아니라 더 복잡한 필터를 해결해야 할 것입니다 내 질문에, 대답 . 그것이하는 변경은 크기를 바꾸지 않으며 응답이 덩어리로 만들어 질 가능성을 배제합니다. 그래서 제 경우에는 필터가 비교적 간단합니다.