iRule event order
Pick the profile stack on a BIG-IP virtual server — client-SSL, HTTP, server-SSL, pool — and see the order the common iRule events fire, from CLIENT_ACCEPTED to CLIENT_CLOSED, as a timeline and a list. All in your browser.
Virtual server profile stack
Computed in your browser. Nothing is sent anywhere.
A model of documented F5 behavior for a Standard virtual server. It never contacts a BIG-IP.
Event sequence
Events in order
CLIENT_ACCEPTEDclient sideA client connection is established. On a Standard virtual server this is when the TCP three-way handshake completes; on FastL4 it fires on the initial SYN.
CLIENTSSL_CLIENTHELLOclient sideThe client's TLS ClientHello has been received, before the handshake is processed. Useful for SNI-based decisions.
CLIENTSSL_HANDSHAKEclient sideThe client-side TLS handshake has completed successfully.
HTTP_REQUESTclient sideThe system has fully parsed the complete client HTTP request headers.
LB_SELECTEDglobalThe system has selected a pool member for the connection.
SERVER_CONNECTEDserver sideThe server-side connection to the selected pool member has been established.
SERVERSSL_HANDSHAKEserver sideThe server-side TLS handshake has completed successfully.
HTTP_REQUEST_SENDserver sideImmediately before the HTTP request is sent to the server-side TCP stack. Runs in the server-side context.
HTTP_RESPONSEclient sideThe system has parsed all of the response status and header lines from the server response.
SERVER_CLOSEDserver sideThe server-side connection has been closed.
CLIENT_CLOSEDclient sideThe client-side connection has been closed.
Conditional events
These fire only under specific conditions: a TCP::collect or HTTP::collect, a load-balancing failure, or a 100 Continue response.
HTTP_REQUEST_DATA↪ HTTP_REQUESTAfter an HTTP::collect has gathered the specified amount of request payload.
LB_FAILED↪ LB_SELECTEDInstead of LB_SELECTED, when the system fails to select a pool or member, or the selected resource is unreachable.
HTTP_RESPONSE_CONTINUE↪ HTTP_RESPONSEBefore HTTP_RESPONSE, whenever the server sends a 100 Continue interim response.
HTTP_RESPONSE_DATA↪ HTTP_RESPONSEAfter an HTTP::collect has gathered the specified amount of response payload.
- Within a single event, multiple iRules run by priority (default 500, lowest number first); the priority command overrides that. This ordering is across events, not within one.
- Availability also depends on provisioning: module events (APM ACCESS_*, ASM/Advanced WAF, bot defense) only fire when that module is provisioned. And CLIENT_DATA, SERVER_DATA, HTTP_REQUEST_DATA, and HTTP_RESPONSE_DATA need an explicit TCP::collect or HTTP::collect first.