You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Brian Behlendorf <br...@organic.com> on 1996/01/16 02:04:37 UTC
Filters for Apache - would this work? (fwd)
Anyone care to comment?
Brian
---------- Forwarded message ----------
Date: Mon, 15 Jan 96 19:05:52 -0500
From: Nathan J. Kurz <na...@tripod.com>
To: apache-users@trytel.com
Newgroups: comp.infosystems.www.servers.unix
Subject: Filters for Apache - would this work?
I posted a while ago to comp.infosystems.www.server.unix about making a filter
module for Apache, such a request for the file testfile.html.bork would cause
the file testfile.html to be processed by a text filter (in this case the
Swedish Chef program) before being sent to the client. Even further, I'd love
to be able to chain filters together, such that I can request things like
testfile.html.bork.gz and get a gzipped version of the encheferized html page.
If possible, I'd like it to work for .shtml pages as well.
I got a nice response as to how mod_action.c might be used as a starting
point, and some information that such filters were anticipated for future
versions of Apache. I've spent some time looking over mod_cgi.c and
mod_action.c, and think I might have an idea that would work. But before I
work on it, I figured I should ask someone with a clue if it stood a prayer.
My scheme in summary:
1) AddType filter/bork .bork
Filter filter/bork /usr/local/bin/chef
2) Have the handler start /usr/local/bin/chef with spawn_child()
Output of 'chef' goes to r->connection->client, plus or minus some
fudged headers.
3) Issue an internal_redirect() (or process_request_internal() ) with
r->connection->client set to the input of 'chef'.
4) 2) and 3) repeat until something actually handles the request. At
this point, r->connection->client is written to by the handler, which
points to the input_fd of the first filter. The first filter's output
goes to the next filter, until the last filter -- whose stdout is the
original r->connection->client.
I'm unsure of how to deal with the headers, though. Encheferizing and
gzipping the mime type would probably be a no-no. I could do something like
putting in an r->no_headers option, and change all the handlers to obey it,
then call send_http_headers at the end... but this is ugly. Or I could make a
seperate fd called r->connection->client_headers, and send the headers through
this (unfiltered) channel. But what about filters that change the mime type
of the contents -- like a gif to jpeg filter... Hmm, maybe I should scale
back my plans a bit, to only deal with text/html -- or at least mime types
that don't change.
Thoughts appreciated. Especially those that tell me to quit wasting my time
and go home and go to sleep :). And what is this 'Protocol Abstraction' that
Apache is heading towards?
nate@tripod.com
http://www.tripod.com