Forum Discussion

Russell_E_Glaue's avatar
Russell_E_Glaue
Icon for Nimbostratus rankNimbostratus
Feb 18, 2009

How to disable iRule processing on keep-alive per request when using HTTP::respond

How to disable iRule processing on keep-alive per request when using HTTP::respond

 

 

 

Okay, I have encountered a problem I cannot figure out how to get around.

 

 

Here is what I want to do:

 

1) First of all I want to keep the keep-alive connection open - I do not want to close it.

 

2) The web user connects to the IP for a web site and sends a request

 

3) the iRule catches something in the request, and send back a response via "HTTP::respond"

 

4) the iRule execute "event HTTP_REQUEST disable" to stop further iRule processing (important) of HTTP_REQUEST.

 

5) the keep-alive connection remains open

 

6) some how the iRule processing is enabled again for the HTTP_REQUEST event.

 

7) on the next web user's http request, the same iRule(s) is processed.

 

 

How do I do this?

 

 

*) I do not see how 6 can be possible, while keeping the keep-alive connection open, from everything I have read about how iRules work.

 

When we use HTTP::respond, the HTTP_RESPONSE event is never processed in the iRules (which is where it has been recommended to execute the "event enable" command), plus I do not see any other events being processed.

 

 

My question may be, how can I reenable the HTTP_REQUEST event for the next request on the same keep-alive connection?

 

But perhaps it should be, how do I turn off iRule processing on a per-request basis when using HTTP::respond?

 

 

My goal is to:

 

1) use the HTTP::respond - immediately returning the response to the web user

 

2) keep the keep-alive connection open

 

3) do not process any further iRules

 

4) allow the web user to send another request on the same keep-alive connection.

 

5) have the iRules process the new request coming across the same keep-alive connection from the web user.

 

6) be able to go back to 1 and continue this loop indefinitely.

 

 

What does NOT work:

 

1) the "return" command - it returns, but further iRules are still processed.

 

2) the "event disable" command - it disables iRules for any future events on the same keep-alive connection, and if you use HTTP::respond, then you have no opportunity to execute "event enable" at the end of the request so iRules will process the next request.

 

3) the "reject", "TCP::close", or other commands that close the keep-alive connection - I do not want to close the connection.

 

4) using global variables as flags for determining it further iRules should be processed - according to this article ( http://devcentral.f5.com/Default.aspx?tabid=63&articleType=ArticleView&articleId=236 ) "a global variable ... [is] shared by all connections"

 

 

Would anyone know what I can do to resolve this?

 

 

-RG

18 Replies