On Thu, May 09, 2002 at 03:16:48PM -0700, Justin Erenkrantz wrote:
> No.  I think the best way to handle this situation is to teach
> HTTP_IN about what requests may have input bodies.  If the request
> doesn't indicate a body, an EOS bucket is returned.

That sounds reasonable enough to me. From the perspective of a module
author, will I be able to assume that an EOS will occur at the end of
a brigade? It would be nice to simply loop over the incoming buckets
(fetching more brigades as necessary) and procsesing until I reach an EOS.
Please stop me if this is not the pattern you're envisioning.

> The rules I can come up with the top of my head are (need to be
> double-checked):
> - GET and HEAD can't have bodies (I think there are others that may
>   do this.)  The RFC says that the bodies should be ignored.  So,
>   there may need to be some way to discard the bodies.  But, it also
>   says that proxies SHOULD forward them.  We may have to think about
>   this.
> - Must have either C-L or a valid T-E.
> - Have to support multipart/byteranges (we aren't doing this now!)
> 
> So, something like this in ap_http_filter:
> if (!ctx) {
>     if method is GET or HEAD { return EOS bucket in brigade; }
>     if T-E { set body type to be T-E }
>     else if C-L { set body length to C-L }
>     else { return EOS bucket in brigade; }
>     ..normal init..
> }
> 
> ..normal code...
> 
> What do you think of this?  I think this means making BODY_NONE
> state invalid.  It was primarily there before because we were
> using ap_getline in HTTP_IN - now we use the brigade calls, so this
> state is no longer needed.  -- justin

Looks correct to me. I think if there is a body, unless the RFC explicitly
forbids us from accepting a body with a particular method, then we should
pass it down the filter stack. I don't at all see how multipart/byterange
would work with this (but then again I still think that we aren't using
sentinel buckets liberally enough in our filter implementations.)

-aaron

Reply via email to