END_RESPONSE message is not sent when the request duration exceeds the write-timeout on ajp-listener with CPING/CPONG enabled
Issue
If the request duration exceeds write-timeout in ajp-listener
with ping
enabled in ProxyPass directive on httpd-side, we can see the following error in Apache's error_log.
ProxyPass "/app/" "ajp://127.0.0.1:8009/app/" ping=10 ttl=55 timeout=120
HTTPD_HOME/logs/error_log
[Thu Dec 05 17:31:33.334793 2024] [proxy_ajp:error] [pid 60300:tid 60320] (70014)End of file found: AH01030: ajp_ilink_receive() can't receive header
[Thu Dec 05 17:31:33.334836 2024] [proxy_ajp:error] [pid 60300:tid 60320] [client 127.0.0.1:45284] AH00992: ajp_read_header: ajp_ilink_receive failed
[Thu Dec 05 17:31:33.334845 2024] [proxy_ajp:error] [pid 60300:tid 60320] (120006)APR does not understand this error code: [client 127.0.0.1:45284] AH00893: dialog to 127.0.0.1:8009 (127.0.0.1:8009) failed
If we check the packet capture, we can confirm that the END_RESPONSE
message was not sent.
1 2024-12-05 17:29:53.081136 127.0.0.1 127.0.0.1 TCP 74 42054 → 8009 [SYN] Seq=0 Win=65495 Len=0 MSS=65495 SACK_PERM TSval=3760530610 TSecr=0 WS=128
2 2024-12-05 17:29:53.081140 127.0.0.1 127.0.0.1 TCP 74 8009 → 42054 [SYN, ACK] Seq=0 Ack=1 Win=65483 Len=0 MSS=65495 SACK_PERM TSval=3760530610 TSecr=3760530610 WS=128
3 2024-12-05 17:29:53.081144 127.0.0.1 127.0.0.1 TCP 66 42054 → 8009 [ACK] Seq=1 Ack=1 Win=65536 Len=0 TSval=3760530610 TSecr=3760530610
4 2024-12-05 17:29:53.081188 127.0.0.1 127.0.0.1 AJP13 71 2:REQ:CPING
5 2024-12-05 17:29:53.081189 127.0.0.1 127.0.0.1 TCP 66 8009 → 42054 [ACK] Seq=1 Ack=6 Win=65536 Len=0 TSval=3760530610 TSecr=3760530610
6 2024-12-05 17:29:53.090263 127.0.0.1 127.0.0.1 AJP13 71 2:RSP:CPONG
7 2024-12-05 17:29:53.090271 127.0.0.1 127.0.0.1 TCP 66 42054 → 8009 [ACK] Seq=6 Ack=6 Win=65536 Len=0 TSval=3760530619 TSecr=3760530619
8 2024-12-05 17:29:53.090330 127.0.0.1 127.0.0.1 AJP13 243 2:REQ:GET /app/slow.jsp HTTP/1.1
9 2024-12-05 17:29:53.132099 127.0.0.1 127.0.0.1 TCP 66 8009 → 42054 [ACK] Seq=6 Ack=183 Win=65536 Len=0 TSval=3760530661 TSecr=3760530619
10 2024-12-05 17:31:33.333474 127.0.0.1 127.0.0.1 AJP13 350 2:RSP:SEND BODY CHUNK
11 2024-12-05 17:31:33.334781 127.0.0.1 127.0.0.1 TCP 66 8009 → 42054 [FIN, ACK] Seq=290 Ack=183 Win=65536 Len=0 TSval=3760630863 TSecr=3760530619 <<<=== FIN from server-side without END RESPONSE message
12 2024-12-05 17:31:33.334861 127.0.0.1 127.0.0.1 TCP 66 42054 → 8009 [FIN, ACK] Seq=183 Ack=291 Win=65536 Len=0 TSval=3760630863 TSecr=3760630862
13 2024-12-05 17:31:33.334875 127.0.0.1 127.0.0.1 TCP 66 8009 → 42054 [ACK] Seq=291 Ack=184 Win=65536 Len=0 TSval=3760630863 TSecr=3760630863
Environment
- Red Hat JBoss Enterprise Application Platform (EAP)
- 7.4
- 8.0
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.