2009-03-06 6 views
1

Ich arbeite an einem ISAPI-Filter, um bestimmte Inhalte aus den Antworten zu entfernen. Ich muss den ganzen Körper der Antwort sammeln, bevor ich die Verarbeitung mache, da der Inhalt, den ich entferne, Sendepuffer überlappen könnte.Ermitteln der Antwortlänge von einem ISAPI-Filter

Um dies zu tun, möchte ich den Inhalt der Antwort mit jeder SF_NOTIFY_SEND_RAW_DATA Benachrichtigung Puffer bis ich zur letzten bin, dann senden Sie die übersetzten Daten. Ich würde gerne wissen, der beste Weg zu bestimmen, welche SF_NOTIFY_SEND_RAW_DATA ist eigentlich die letzte. Wenn ich bis zur SF_NOTIFY_END_OF_REQUEST Benachrichtigung warte, dann weiß ich nicht, wie ich die Daten senden soll, die ich gepuffert habe.

Ein Ansatz wäre, die Inhaltslänge zu verwenden. Dazu müsste ich das Ende der Header erkennen. Es würde auch voraussetzen, dass der Content-Length-Header korrekt ist (ist das garantiert?). Da HTTP nicht einmal einen Header für die Inhaltslänge benötigt, bin ich mir nicht einmal sicher, dass es immer da sein wird. Es scheint, als sollte es einen einfacheren Weg geben.

Ich nehme an, die Antwort ist nicht chunked, so dass ich nicht mit Dechunking handle, bevor ich die Antwort ändern. Wenn ich die Änderungen am Antworthauptteil vornehme, ändert sich auch die Größe des Antworthauptteils nicht, so dass ich nicht zurückgehen und die Inhaltslänge aktualisieren muss.

Antwort

1

Ich fand schließlich einige gute Diskussionen über Google.

Diese Beiträge beantworten meine Fragen, sowie Fragen ein komplizierterer Filter wirft Adresse müßte: 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

Die Filter I s die volle Anfrage in seinen eigenen Puffer Pufferung habe dann die SF_NOTIFY_END_OF_REQUEST mit dem Inhalt senden . Die Änderung, die es tut, ändert nicht die Größe und schließt die Möglichkeit aus, dass die Antwort chunked ist, also ist in meinem Fall der Filter relativ einfach.

Verwandte Themen