You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@httpd.apache.org by Mohit Anchlia <mo...@gmail.com> on 2010/11/17 23:58:23 UTC

[users@httpd] Filter or Handler to look at content length and return custom error message suggestion

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.

---------------------------------------------------------------------
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@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Re: [users@httpd] Filter or Handler to look at content length and return custom error message suggestion

Posted by Mohit Anchlia <mo...@gmail.com>.
On Wed, Nov 17, 2010 at 5:56 PM, Mohit Anchlia <mo...@gmail.com> wrote:
> On Wed, Nov 17, 2010 at 4:50 PM, Eric Covener <co...@gmail.com> wrote:
>> On Wed, Nov 17, 2010 at 5:58 PM, Mohit Anchlia <mo...@gmail.com> 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@gmail.com
>>
>> ---------------------------------------------------------------------
>> 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@httpd.apache.org
>>   "   from the digest: users-digest-unsubscribe@httpd.apache.org
>> For additional commands, e-mail: users-help@httpd.apache.org
>>
>>
>

---------------------------------------------------------------------
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@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Re: [users@httpd] Filter or Handler to look at content length and return custom error message suggestion

Posted by Mohit Anchlia <mo...@gmail.com>.
On Wed, Nov 17, 2010 at 4:50 PM, Eric Covener <co...@gmail.com> wrote:
> On Wed, Nov 17, 2010 at 5:58 PM, Mohit Anchlia <mo...@gmail.com> 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?

>
> 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@gmail.com
>
> ---------------------------------------------------------------------
> 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@httpd.apache.org
>   "   from the digest: users-digest-unsubscribe@httpd.apache.org
> For additional commands, e-mail: users-help@httpd.apache.org
>
>

---------------------------------------------------------------------
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@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Re: [users@httpd] Filter or Handler to look at content length and return custom error message suggestion

Posted by Eric Covener <co...@gmail.com>.
On Wed, Nov 17, 2010 at 5:58 PM, Mohit Anchlia <mo...@gmail.com> 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.

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@gmail.com

---------------------------------------------------------------------
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@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org