Edit report at https://bugs.php.net/bug.php?id=65634&edit=1

 ID:                 65634
 Updated by:         ahar...@php.net
 Reported by:        butesa at freenet dot de
 Summary:            HTTP wrapper is very slow with protocol_version 1.1
-Status:             Assigned
+Status:             Closed
 Type:               Bug
 Package:            HTTP related
 Operating System:   Ubuntu 12.04 x64
 PHP Version:        5.5.3
 Assigned To:        aharvey
 Block user comment: N
 Private report:     N

 New Comment:

Implemented on master:
https://github.com/php/php-src/commit/8983a38d5130c11bd96643dfa2b2f1393ac5969d

I don't think this is a good candidate for 5.4 or 5.5: it's debatable whether 
this is a bug fix, and it does subtly change PHP's behaviour. I'd be surprised 
if 
it broke any code, but it should be something users have to test, and putting 
it 
in the next version should ensure that.


Previous Comments:
------------------------------------------------------------------------
[2013-09-11 20:30:19] ahar...@php.net

Fair point. Let me see if we can send a Connection: close request header by 
default and allow overriding via the headers context option if the user wants 
it 
for some reason.

------------------------------------------------------------------------
[2013-09-10 19:43:18] butesa at freenet dot de

I looked into RFC 2616 today. It says:
HTTP/1.1 applications that do not support persistent connections MUST include 
the "close" connection option in every message.

Obviously, the HTTP wrapper can't handle persistent connections correctly. So 
it should automatically add a Connection: close header when protocol_version is 
set to 1.1.

------------------------------------------------------------------------
[2013-09-09 23:52:31] butesa at freenet dot de

I don't see how it can be not a bug if a http request takes 100 seconds.
If the server uses connection: keep-alive, then the client has to close the 
connection if it doesn't want to make any further requests.

------------------------------------------------------------------------
[2013-09-09 23:03:47] ahar...@php.net

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

www.google.de responds with a keep-alive connection when a HTTP/1.1 request is 
made and no Connection request header is included, which is valid in RFC 2616. 
Sending a "Connection: close" request header restores the 1.0 behaviour.

------------------------------------------------------------------------
[2013-09-08 16:27:47] butesa at freenet dot de

Description:
------------
Loading a website with the http wrapper takes very long if protocol_version is 
set to 1.1. The time it takes depends on the timeout. On some servers the 
problem doesn't occur.

I tested also on Ubuntu 10.04 (PHP 5.3.2-1ubuntu4.19) and Ubuntu 12.04 (PHP 
5.3.10-1ubuntu3.7), both 64bit.

Test script:
---------------
<?php
$url = 'http://www.google.de/intl/de/policies/?fg=1';
foreach(array(1.0,1.1) as $proto)
{
        for ($timeout = 1; $timeout < 60; $timeout+=10)
        {
                $st = microtime(true);
                $opt = array(
                        'http' => array(
                                'timeout' => $timeout,
                                'protocol_version' => $proto,
                                ),
                        );
                $context = stream_context_create($opt);
                $content = file_get_contents($url,false,$context);
                printf("%2d %.1f %f %s\n", $timeout, $proto, microtime(true) - 
$st, md5($content));
        }
}
?>

Expected result:
----------------
The request takes the same time, no matter what timeout and protocol_version is 
set.

Actual result:
--------------
Output of the test script:
For $url='http://www.google.de/intl/de/policies/?fg=1':
 1 1.0 0.279102 60bf7bc72d2a06b337c8a8464e0f9e66
11 1.0 0.277956 60bf7bc72d2a06b337c8a8464e0f9e66
21 1.0 0.283753 60bf7bc72d2a06b337c8a8464e0f9e66
31 1.0 0.285862 60bf7bc72d2a06b337c8a8464e0f9e66
41 1.0 0.277894 60bf7bc72d2a06b337c8a8464e0f9e66
51 1.0 0.285653 60bf7bc72d2a06b337c8a8464e0f9e66
 1 1.1 2.284301 60bf7bc72d2a06b337c8a8464e0f9e66
11 1.1 22.305424 60bf7bc72d2a06b337c8a8464e0f9e66
21 1.1 42.309270 60bf7bc72d2a06b337c8a8464e0f9e66
31 1.1 62.355997 60bf7bc72d2a06b337c8a8464e0f9e66
41 1.1 82.360794 60bf7bc72d2a06b337c8a8464e0f9e66
51 1.1 102.379933 60bf7bc72d2a06b337c8a8464e0f9e66

For $url='http://www.example.com':
 1 1.0 0.491382 09b9c392dc1f6e914cea287cb6be34b0
11 1.0 0.426191 09b9c392dc1f6e914cea287cb6be34b0
21 1.0 0.428513 09b9c392dc1f6e914cea287cb6be34b0
31 1.0 0.423852 09b9c392dc1f6e914cea287cb6be34b0
41 1.0 0.423751 09b9c392dc1f6e914cea287cb6be34b0
51 1.0 0.431590 09b9c392dc1f6e914cea287cb6be34b0
 1 1.1 1.420486 09b9c392dc1f6e914cea287cb6be34b0
11 1.1 6.143113 09b9c392dc1f6e914cea287cb6be34b0
21 1.1 5.994384 09b9c392dc1f6e914cea287cb6be34b0
31 1.1 5.991940 09b9c392dc1f6e914cea287cb6be34b0
41 1.1 6.012121 09b9c392dc1f6e914cea287cb6be34b0
51 1.1 6.007920 09b9c392dc1f6e914cea287cb6be34b0

For $url='http://www.php.net':
 1 1.0 1.673016 2dcc6fe85b335205a35d9980a9095735
11 1.0 1.935555 2dcc6fe85b335205a35d9980a9095735
21 1.0 1.648235 2dcc6fe85b335205a35d9980a9095735
31 1.0 1.637566 2dcc6fe85b335205a35d9980a9095735
41 1.0 1.633473 2dcc6fe85b335205a35d9980a9095735
51 1.0 1.718051 2dcc6fe85b335205a35d9980a9095735
 1 1.1 1.647803 2dcc6fe85b335205a35d9980a9095735
11 1.1 1.863799 2dcc6fe85b335205a35d9980a9095735
21 1.1 1.673567 2dcc6fe85b335205a35d9980a9095735
31 1.1 1.651704 2dcc6fe85b335205a35d9980a9095735
41 1.1 1.657976 2dcc6fe85b335205a35d9980a9095735
51 1.1 1.635651 2dcc6fe85b335205a35d9980a9095735


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=65634&edit=1

Reply via email to