I have a case where web server needs to be able to respond both to normal (fast) clients and very slow clients. Majority of client requests are for very small responses (full HTTP response in 1-3 TCP packets).
Occassionally, a client may request for a larger payload (not big, only 30-500kB), which the slow clients are able to receive at very slow pace, over 2-15 min. Servers are IIS with 120s default timeout. We would not like to change that. Request is HTTP/1.1 and have keepalives and also connection close headers.
Without F5 LTM in between, a slow client gets the whole HTTP response ok, as acking to HTTP response's TCP packets is well within the timeouts. With F5 in between, the LTM's TCP receive buffer will get most or the whole HTTP payload within the same second as it starts to send it to the client.
As the F5 has acked the whole HTTP payload within the first second, IIS starts its HTTP idle timeout counter, while the client has just started to receive the payload. Eventually IIS the timeout will expire and IIS will send a TCP reset. This will propagate to the client and the transfer will terminate prematurely..
I would not like to change the receive/transmit buffer settings to very small as these larger responses are very infrequent and majority of the clients are fast (or normal). Autosetting the buffers/windows in TCP profile did not help. Nor did enabling pacing.
I could make an irule separate the slow clients based client type header and do something to adjust to the slow clients. Any advice on this?