HTTP FORM POST to Linux/Apache/PHP slow or fails with Mac/XP/Vista Clients
Posted on 2007-10-11
I have excessive TCP retransmissions and duplicate acknowledgements when Windows Vista IE7 users attempt to do a simple FORM POST with a JPEG image to a simple upload.php script on my Apache 2.2.6 server running on CentOS 5 with PHP 5.2.4.
On Macintosh, Firefox and Safari perform slowly when uploading a 50k JPEG. Windows XP using Firefox and IE6 also perform slowly, but all four of these combinations upload the file within 2 minutes. Vista with Firefox also performs slowly, uploading within 2 minutes. I have not yet tested IE7 on XP.
I have tested a number of things:
The upload script works fine from Vista and IE7 when running on Red Hat Enterprise Linux 4 with Apache 2.2.3 and PHP 5.1.4. Both the problem machine, and the non-problem machine are running on ESX 3.0.2 hosts (I have migrated both hosts to different ESX cluster nodes to rule out networking issues.)
I have built a second RHEL4 host with packages installed only from the Red Hat Network. I have not customized the configuration of Apache 2.0.52 or PHP 4.3.9 on this new box - and yet it has the SAME issue as the CentOS 5 box. I have tried using both the VMWare tools NIC and the default PCNET32 NIC.
I copied the CentOS virtual machine to a development lab ESX node in our local facility (the others are in a datacenter) but the problem continues to be evident when the client and server are on the same network segment.
What I don't know, and haven't been able to find through general internet research, is whether there are settings in Apache or PHP that successful sites have been tuning to accommodate form posts from Vista+IE7. I'm convinced this is not a layer 2 issue because I've relocated the affected virtual machine to two physically separate networks, and tested using two independently constructed Vista workstations (not from an image.)
Since the problem is also evident in XP and Mac as slow upload performance, I believe the problem may be related to the method used by Apache or PHP to accept this form data. SFTP and SSH do not seem affected.