Bug ID 560231: Pipelined requests may result in a RST if the server disconnects

Last Modified: Sep 13, 2023

Affected Product(s):
BIG-IP LTM(all modules)

Known Affected Versions:
10.2.4, 11.4.1, 11.5.1, 11.5.2, 11.5.3, 11.5.4, 11.5.5, 11.5.6, 11.5.7, 11.5.8, 11.5.9, 11.5.10, 11.6.1, 11.6.2, 11.6.3, 11.6.3.1, 11.6.3.2, 11.6.3.3, 11.6.3.4, 11.6.4, 11.6.5, 11.6.5.1, 11.6.5.2, 11.6.5.3, 12.0.0, 12.0.0 HF1, 12.1.0 HF1, 12.0.0 HF2, 12.1.0 HF2, 12.1.1 HF1, 12.1.1 HF2, 12.1.2 HF1, 12.1.2 HF2

Fixed In:
12.1.0, 12.0.0 HF3

Opened: Nov 30, 2015

Severity: 3-Major

Symptoms

If a HTTP client sends multiple pipelined requests before a full response is received, the HTTP filter will buffer them, and send them one at a time to the server. If the server ends via a "Connection: Close" the HTTP filter will ignore this, and continue to send the next buffered request. If the server then sends a FIN packet while that buffered request is in progress, the HTTP filter will send a RST packet to the client.

Impact

The client will receive a RST instead of a FIN packet.

Conditions

Multiple concurrent pipelined HTTP requests, and a back-end server that closes a connection while some requests are still buffered. Oneconnect is not used.

Workaround

There are two work-arounds. 1) Enable one-connect. 2) via iRule. If a "Connection: close" header exists in the HTTP_RESPONSE event, then HTTP::close may be used to cleanly shut the connection down.

Fix Information

The HTTP filter will no longer cause a RST packet to be sent instead of a FIN packet if a back-end server closes a connection while pipelined requests are buffered.

Behavior Change

Guides & references

K10134038: F5 Bug Tracker Filter Names and Tips