Почему POST запрос через HTTP/1.1 медленее HTTP/1.0
От: DimaShep  
Дата: 10.08.10 12:50
Оценка:
Возникла проблема, сам не могу понять почему время выполнения POST запроса через HTTP/1.1 намного медленнее чем через HTTP/1.0.
Беру меняю в коде HTTP/1.1 на HTTP/1.0 и запрос выполняется за доли секунды, а при HTTP/1.1 запрос выполняется приблизительно 5 сек.

Чем это может быть вызвано?
Re: Почему POST запрос через HTTP/1.1 медленее HTTP/1.0
От: Vamp Россия  
Дата: 10.08.10 13:15
Оценка:
DS>Возникла проблема, сам не могу понять почему время выполнения POST запроса через HTTP/1.1 намного медленнее чем через HTTP/1.0.
DS>Беру меняю в коде HTTP/1.1 на HTTP/1.0 и запрос выполняется за доли секунды, а при HTTP/1.1 запрос выполняется приблизительно 5 сек.
Как меряешь время выполнения запроса? В HTTP 1.1 сервер не закрывает соединение в течение некоторого времени после выполнения запроса, ожидая дополнительных запросов в нем. Может, ты ждешь, пока соединение закроют?
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Почему POST запрос через HTTP/1.1 медленее HTTP/1.0
От: DimaShep  
Дата: 10.08.10 13:19
Оценка:
Здравствуйте, Vamp, Вы писали:

DS>>Возникла проблема, сам не могу понять почему время выполнения POST запроса через HTTP/1.1 намного медленнее чем через HTTP/1.0.

DS>>Беру меняю в коде HTTP/1.1 на HTTP/1.0 и запрос выполняется за доли секунды, а при HTTP/1.1 запрос выполняется приблизительно 5 сек.
V>Как меряешь время выполнения запроса? В HTTP 1.1 сервер не закрывает соединение в течение некоторого времени после выполнения запроса, ожидая дополнительных запросов в нем. Может, ты ждешь, пока соединение закроют?


вот код:

$fp = @fsockopen($host, '80', $errno, $errstr,1);

if ($fp)
{
      fputs($fp, "POST ".$path." HTTP/1.0\r\nHost: ".$host."\r\n");
      fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
      fputs($fp, "Content-length: ". strlen($post_query) ."\r\n\r\n");
      fputs($fp, $post_query);
    while (!feof ($fp)) 
        $rez .= fgets ($fp, 10240);

    fclose ($fp);
}
else
    return null;
Re[3]: Почему POST запрос через HTTP/1.1 медленее HTTP/1.0
От: Vamp Россия  
Дата: 10.08.10 13:23
Оценка:
DS>вот код:
Ну правильно, так и есть.

DS> while (!feof ($fp))

Вот этот цикл закончится только тогда, когда соединение закроет сервер. Считай раазмер сообщения или вернись на HTTP 1.0
Да здравствует мыло душистое и веревка пушистая.
Re[4]: Почему POST запрос через HTTP/1.1 медленее HTTP/1.0
От: DimaShep  
Дата: 10.08.10 14:05
Оценка:
Здравствуйте, Vamp, Вы писали:

DS>>вот код:

V>Ну правильно, так и есть.

DS>> while (!feof ($fp))

V>Вот этот цикл закончится только тогда, когда соединение закроет сервер. Считай раазмер сообщения или вернись на HTTP 1.0


Вот результат работы цикла:

1) (0.13477993011475) = HTTP/1.1 200 OK
2) (0.13487482070923) = Date: Tue, 10 Aug 2010 14:04:19 GMT
3) (0.13488483428955) = Server: Apache/2.2.13 (FreeBSD) DAV/2 PHP/5.2.9 with Suhosin-Patch mod_ssl/2.2.13 OpenSSL/0.9.8e
4) (0.13489103317261) = Cache-Control: max-age=0, private
5) (0.13489890098572) = Expires: Tue, 10 Aug 2010 14:04:19 GMT
6) (0.13490605354309) = Vary: User-Agent,Accept-Encoding
7) (0.13491201400757) = Content-Length: 15
8) (0.13491797447205) = Content-Type: text/plain
9) (0.13492298126221) =
10) (5.1353888511658) = Привет Мир!!!

Почему он сначала не вернул все, а потом ожидал закрытие соединения?
Re[5]: Почему POST запрос через HTTP/1.1 медленее HTTP/1.0
От: Vamp Россия  
Дата: 10.08.10 14:08
Оценка:
DS>Почему он сначала не вернул все, а потом ожидал закрытие соединения?
Уверяю тебя, он именно так и сделал.
Да здравствует мыло душистое и веревка пушистая.
Re[6]: Почему POST запрос через HTTP/1.1 медленее HTTP/1.0
От: DimaShep  
Дата: 10.08.10 15:11
Оценка:
Здравствуйте, Vamp, Вы писали:

DS>>Почему он сначала не вернул все, а потом ожидал закрытие соединения?

V>Уверяю тебя, он именно так и сделал.

Так по времени видно что он єти 5 сек читал последнюю строку.
Re[7]: Почему POST запрос через HTTP/1.1 медленее HTTP/1.0
От: DimaShep  
Дата: 10.08.10 15:14
Оценка:
Здравствуйте, DimaShep, Вы писали:

DS>Здравствуйте, Vamp, Вы писали:


DS>>>Почему он сначала не вернул все, а потом ожидал закрытие соединения?

V>>Уверяю тебя, он именно так и сделал.

DS>Так по времени видно что он єти 5 сек читал последнюю строку.


Нашел решение. Достаточно добавить принудительное закрытие в заголовок:
Connection: close
И все начинает работать нормально.

Спасибо за подсказки.
Re[8]: Почему POST запрос через HTTP/1.1 медленее HTTP/1.0
От: Anton Batenev Россия https://github.com/abbat
Дата: 10.08.10 20:18
Оценка: +3 -1
Здравствуйте, DimaShep, Вы писали:

DS> Нашел решение. Достаточно добавить принудительное закрытие в заголовок:

DS> Connection: close
DS> И все начинает работать нормально.
DS> Спасибо за подсказки.

Это не решение — это эмуляция HTTP/1.0 в плане Keep-Alive.
avalon 1.0rc3 rev 351, zlib 1.2.3
Re[9]: Почему POST запрос через HTTP/1.1 медленее HTTP/1.0
От: NavuhodonosoR Россия  
Дата: 23.08.10 22:23
Оценка: :)
Здравствуйте, Anton Batenev, Вы писали:

DS>> Нашел решение. Достаточно добавить принудительное закрытие в заголовок:

DS>> Connection: close

Это не принудительное закрытие, а уведомление об отсутствии необходимости постоянного соединения. Разница большая.

DS>> И все начинает работать нормально.

DS>> Спасибо за подсказки.

AB>Это не решение — это эмуляция HTTP/1.0 в плане Keep-Alive.


2AB: Не согласен. Во-первых по умолчанию HTTP/1.1 предполагает постоянное соединение для снижения нагрузки на сервер в случае, когда клиенту требуется выполнить более одного запроса. Если за разумное время требуется запрашивать только один URL — такой способ абсолютно оправдан. А во-вторых предлагаю быть более конструктивным.

2DS: А стандарты все же стоит читать хотя-бы в объеме, минимально необходимом для понимания отклика сервера. В твоем случае следовало обратить внимание на message-header Content-Length: 15

14.13 Content-Length
The Content-Length entity-header field indicates the size of the entity-body, in decimal number of OCTETs



Литературный контекстозависимый перевод

Объяснения, как использовать эти сведения нужны?
Заголовок Content-Length указывает на размер содержимого в байтах в десятичном представлении.

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.