On Wed, Nov 17, 2010 at 5:56 PM, Mohit Anchlia <mohitanchlia@xxxxxxxxx> wrote: > On Wed, Nov 17, 2010 at 4:50 PM, Eric Covener <covener@xxxxxxxxx> wrote: >> On Wed, Nov 17, 2010 at 5:58 PM, Mohit Anchlia <mohitanchlia@xxxxxxxxx> wrote: >>> Apache 2: >>> >>> I have a requirement to look at content length and if it is greatar >>> than desired size then return error message. So psuedo code is like: >>> >>> if content_length > 32G >>> then >>> if url contains /abc/ >>> then >>> echo "0|abc|Bad length" # pipe delimited format that some >>> clients api support >>> else if url contains /def/ >>> echo "<xml><message>Bad request</message><xml>" # client supporting XML >>> fi >>> fi >>> >>> I first thought of using LimitRequestBody but that didn't work for me. >>> So now I am thinking if I can use filter or handlers. Does anyone know >>> if I can use filters that is read the lenght and the url and then >>> return the response instead of continuing down the chain. >>> >>> P.S. Note: Our requests are mod-jk requests. So if content length >>> check succeeds then hand over the request to mod jk workers wihch then >>> send it to jboss app server. >>> >> >> If you know this stuff is not chunked, you can do a simpler >> post_read_request hook and return 413 from it. > > I haven't used handlers or filters before in Apache. Searching online > I see I can make use of "PerlPostReadRequestHandler" and may be read > the content length. But I have few more quesitons: > > 1. After the request is read and if I find content length > x then how > do I create the response and return from there without sending the > request to mod-jk worker > 2. If I find content length is ok and want to continue sending the > request to mod_jk worker then how do I do that. > 3. In the handler can I also generate custom response text? I tried to write code but still unsure of few thing: 1. If I return HTTP_REQUEST_ENTITY_TOO_LARGE response then would it still continue sending the request to mod_jk. Or would it be returned back to the client? 2. Does my code look ok and something that will work? Can someone please suggest? This is my code sub content_handler { my $r = shift; my $uri = $r->uri; if ( $r->header_in("Content-length") lt 20000000) { return Apache2::Const::OK; # Continue sending request to mod jk worker } $r->send_http_header; if ($uri =~ /xml/){ $r->content_type("text/xml"); $r->print("File too large|Bye"); #Send pipe delimited back to client assuming it will not continue sending this request to mod_jk worker }else{ $r->content_type("text/plain"); $r->print ("<xml><Message>Too Large, Bye!!</Message></xml>"); #Send xml delimited back to client assuming it will not continue sending this request to mod_jk worker } return Apache2::Const::HTTP_REQUEST_ENTITY_TOO_LARGE; # Return back to client } > >> >> If it might be chunked, it should be relatively easy to rip the guts >> out something like mod_deflate's input filter and teach it to count >> bytes / return an error. >> >> -- >> Eric Covener >> covener@xxxxxxxxx >> >> --------------------------------------------------------------------- >> The official User-To-User support forum of the Apache HTTP Server Project. >> See <URL:http://httpd.apache.org/userslist.html> for more info. >> To unsubscribe, e-mail: users-unsubscribe@xxxxxxxxxxxxxxxx >> " from the digest: users-digest-unsubscribe@xxxxxxxxxxxxxxxx >> For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx >> >> > --------------------------------------------------------------------- The official User-To-User support forum of the Apache HTTP Server Project. See <URL:http://httpd.apache.org/userslist.html> for more info. To unsubscribe, e-mail: users-unsubscribe@xxxxxxxxxxxxxxxx " from the digest: users-digest-unsubscribe@xxxxxxxxxxxxxxxx For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx