Hi Mark & all, After using the Jpcap (java sniffer tool) to watch the http packets, We Finally found out the root cause of this problem is indeed the keep-live BUG of Internet Explorer, below is our finding for your reference :
Finding 1 : When using AJAX to make http requests, Internet Explorer always sends http header and body separately in 2 (or more) IP packets. and in our case the header is always sent in the first packet since the header length is never greater than 1460 bytes(Maximum packet data size). Finding 2 : 1) When apache httpd server detects the keep-live timeout, it will send a Fin (finish) Packet to Client (IE) telling it to close the connection, but at meanwhile Client is preparing to send another POST request to Apache, for unknown reasons (IE BUG!) IE still keeps sending the POST head & body instead of closing connection immediately. 2) Apache server will ignore the POST request. and send the ACK Packet back to Client. 3) and next, the Client sends a Fin(Finished) Packet to apache server to confirm closing connection. 4) Apache server sends an ACK packet to confirm ending this connection. 5) Next, Client resend the POST header again to Apache server. 6) Apache Server confirm receiving the header. 7) after about 1.5 minutes, Client send a RST (Reset) packet to Apache Server asking reset the connection. In this case the POST body is never sent to Apache server that causes the request parameters is missing. Following is the Packet flow for your reference : (Time format hhms.S) Time From to SEQ ACK Flag remark ======== ====== ====== ======= ========= ==== ==================================== 071249.751 Client Apache 1088748537 1807070026 previous conversion sent from Client 071304.243 Apache Client 1807070026 1088748537 FIN time-out(idle 15 seconds) 071304.467 Client Apache 1088748537 1807070026 PSH Client still sends POST header 1807070027 Apache Client 1807070027 1088749235 1088749235 Client Apache 1088749235 1807070026 PSH Client still sends POST body 071304.479 Apache Client 1807070027 1088749316 071304.720 Client Apache 1088749316 1807070027 071304.721 Client Apache 1088749316 1807070027 Fin Finish the connection 071304.722 Apache Client 1807070027 1088749317 Server confirm ending the connection 071304.737 Client Apache 1959299521 1807484246 PSH Client resend the Post header in another connection 071304.737 Apache Client 1807484246 1959300219 Apache confirm receiving this header 071425.235 Client Apache 1959300219 1807484246 RST after about 1.5 minutes, Client request to reset the connection In conclusion, the problem only happens when Keep-Alive is timeout, that's why it's related to the apache keep-alive setting, smaller keep-alive timeout will raise the timeout frequency and cause more missing body part errors as well. Unfortunately, so far there is no solution yet unless Microsoft fix the BUG. Thanks James. > > >