Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: http заголовки + apache  (Прочитано 15647 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« : 30-03-2009 13:11 » 

Отсылаю на сервер запрос,

в ответ получаю
Код:
HTTP/1.1 200 OK
Date: Mon, 23 Mar 2009 06:24:04 GMT
Server: Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8b mod_bwlimited/1.4
X-Powered-By: PHP/5.2.9
Connection: close
Content-Type: text/html

Это я вижу в железке (т.е. что получил, то показал на другой сервер)
Код:
Date: Mon, 30 Mar 2009 12:56:42 GMT
Server: Apache/2.0.63 (FreeBSD) PHP/4.4.9 with Suhosin-Patch
Last-Modified: Thu, 25 Dec 2008 11:51:43 GMT
Etag: "831c-72d-a1d951c0"
Accept-Ranges: bytes
Content-Length: 1837
Content-Type: text/html

200 OK

Это я смотрю в фф, поэтому и порядок разный.
Кроме того - сервера разные.

Больше всего меня интересует заголовок

Connection: close
Кто закрывает соединение, потому как

Код:
<?php
headers
(&#39;HEX: ,"bla-bla");
?>
выдает

Date: Mon, 30 Mar 2009 13:08:26 GMT
Server: Apache/2.0.63 (FreeBSD) PHP/4.4.9 with Suhosin-Patch
X-Powered-By: PHP/4.4.9
HEX: ,"bla-bla"
Content-Length: 2
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html

200 OK

Где это все настраивается? В частности keepalive?
« Последнее редактирование: 05-04-2009 16:37 от Ghost » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 30-03-2009 13:41 » 

Sla, если я правильно понял, сервер говорит "keep-alive", а в клиенте ты видишь "close". Так?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #2 : 30-03-2009 13:53 » 

Что то я не понял что нужно то? Close приходит потому что ты запрос послал он отработал пришел ответ 200 разговор окончен, то есть все хорошо (Привет-пока). Keep-allive настраивать на сервер с которым общаешься.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 30-03-2009 13:55 » 

да что-то я запутался

есть у меня железяка (не у меня, но я в консультантах). Ломится на сервер
типа
telnet address 80
GET http://adress/test/head.php HTTP/1.0 \r\n\r\n

в ответ получает

HTTP/1.1 200 OK
Date: Mon, 23 Mar 2009 06:24:04 GMT
Server: Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8b mod_bwlimited/1.4
X-Powered-By: PHP/5.2.9
Connection: close
Content-Type: text/html


сейчас сам ломлюсь телнетом на тестовый сервер
получаю

HTTP/1.1 200 OK
Date: Mon, 30 Mar 2009 13:45:45 GMT
Server: Apache/2.0.63 (FreeBSD) PHP/4.4.9 with Suhosin-Patch
X-Powered-By: PHP/4.4.9
HEX: ,"bla-bla"
Content-Length: 2
Connection: close
Content-Type: text/html


Но почему когда смотрю заголовки из ФФ, то вижу

Keep-Alive: timeout=15, max=100
Connection: Keep-Alive

Получается что браузер установил keepalive.

Если это так... пошел копать глубже


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 30-03-2009 13:58 » 

Слав, видимо ты видел предварительные заголовки, которые подготовил PHP, а Апач все переиначил, согласно своим настройкам.
А HTTP 1.0 вообще не поддерживает keep-alive - потому и гарантированный close на такой запрос.

Лучше бери в руки снифер - это здесь единственный правильный инструмент. Смотри в сторону Wireshark (бывший Ethereal).
« Последнее редактирование: 30-03-2009 14:00 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 30-03-2009 14:16 » 

не я имею ввиду, что браузер посылает
request HTTP_KEEP_ALIVE (по крайней мере я вижу это в массиве $_SERVER)
   


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 30-03-2009 15:44 » 

Слав, путано как-то.

Давай по порядку.

I)
Браузер может:
1. Послать запрос HTTP 1.0.
2. Послать 1.1 с Connection: close.
3. Все остальное.

Пп. 1 и 2 приведут к ответу Connection: close.
П. 3 даст возможность серверу самому решать.

II)
PHP должно быть пофиг на эти заголовки: только если ответить "close" на п.3.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 30-03-2009 18:26 » new

Wireshark показывает что браузер посылает запрос

...
Keep-alive: 300 \r\n
...

соответственно он запрос попадает в массив $_SERVER
и интерпретируется как
HTTP_KEEP_ALIVE
при этом я получаю ответ
...
Keep-Alive: timeout=15, max=100
...


ладно, это я еще понимаю
Keep-alive нужен чтобы продолжить дальше получать запросы, например, к рисункам.
Т.е.
Connection: Keep-Alive

Дальше, мне пока не понятно
Что в таком случае делает браузер? запрашивая картинку?
посылает новый запрос? или как-то работает в текущем соединении?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 30-03-2009 19:15 » 

Дальше, мне пока не понятно
Что в таком случае делает браузер? запрашивая картинку?
посылает новый запрос? или как-то работает в текущем соединении?
Ну если удаленный хост разорвал соединение, то последующий вызов со стороны клиента функции write ( ssize_t write(int fd, const void *buf, size_t count); ), вернет значение, отличное от переданного для отправки, т.е. возвращенное значение будет отличаться от count.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 30-03-2009 19:39 » 

Sla, keep-alive работает так: после завершения передачи запроса сервер не разрывает сетевое соединение и ждет в течении "timeout=15" новый запрос и, если запроса нет, то закрывает соединение. Так может повторяться для "max=100" запросов, а потом сервер закроет соединение. При этом, клиент может закрыть его когда угодно.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines