Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   HTTP 1.1,вопрос (https://forum.antichat.xyz/showthread.php?t=184219)

_nic 05.03.2010 19:51

HTTP 1.1,вопрос
 
1.1 в отличии от 1.0 незакрывает сокет после ответа на запрос.Так как тогда в 1.1 отловить момент когда нужно прекращать прием данных?

slesh 05.03.2010 21:22

2 _nic ну там много различий. Тут всё делов в двух вещах:
поле Connect каторое ты передаешь. Там ты можешь сказать Keep-alive или close
Первое типа остаться на линии, а второе - типа чтобы сервак закрыл соединение после отправки данных.
Вторая фишка - сервак отвечает и в его ответе почти всегда есть Content-Length в котором написано сколько данных он должен передать тебе. Вот и считывай это кол-во )

dvion 05.03.2010 22:15

Если в отдельных случаях с блоками осиливать вручную лень - лучше юзать 1.0. В реальных условиях keep-alive редко, когда может пригодиться.

slesh 06.03.2010 00:29

keep-alive юзается когда в один контекст посылаются несколько последовательных запросов. Такое любят делать с проксями браузеры типа FF.

Chrome~ 06.03.2010 00:41

slesh, что тогда означает поле Keep-Alive: 300, и почему в большинстве случаев именно 300, а не какое-нибудь другое значение?

wildshaman 06.03.2010 00:45

Keep-Alive. Заголовок Keep-Alive содержит значение, которое означает в течение какого времени в секундах будет удерживаться соединение. Этот заголовок следует отправлять только в том случае, если заголовок Connection содержит значение keep-alive.
Поддерживается только для протокола HTTP версии 1.1.

В нашем примере этот заголовок содержит значение 300, т.е. браузер сообщает серверу, что намерен удерживать постоянное соединение с сервером в течение 300 секунд.

Chrome~ 06.03.2010 01:18

wildshaman, спасибо большое, теперь понятно.

dvion 06.03.2010 02:42

slesh,
Броузеры - да, смысл - в редких случаях актуален.

Chrome~ 06.03.2010 15:14

Слушайте, меня интересует следующие:

1) Как реализовать работу программы, если используешь Keep-Alive, но при этом сервак не передал значение Content-Length (количество отправленных байтов)?
2) Если принял все данные, как реализовать паузу (те же 300 сек.), оставаясь на линии, но при том, что бы программа не зависала от ожидания?

dvion 06.03.2010 16:18

1)
а) 0D 0A (в отсутствии content-length)
б) читать блоки, пока блок не станет меньше его размера (в отсутствии content-length)

2)

- Буфер
- Три процедуры (открытие-коннект, работа с буфером, закрытие)
- Thread

Chrome~ 06.03.2010 20:04

dvion, что ты имеешь здесь ввиду:
Цитата:

Сообщение от dvion
а) 0D 0A (в отсутствии content-length)

Ну и:
Цитата:

Сообщение от dvion
б) читать блоки, пока блок не станет меньше его размера (в отсутствии content-length)

Не исключено, что все блоки будут одинакового размера. Или же наоборот: сервер будет отправлять блоки разного размера. (по 1024 байт, 2048 и т. д.)

RedFern.89 06.03.2010 23:06

Keep-Alive - это поле указывает на не разрываное соединение, напиример "Connection: kerep-alive". и период соединения: "Keep-alvive: 300" а ваще найдите статью на википедии про HTTP - заголовки ))) там есть все))) особенно про Referer и User-Agent)

dvion 07.03.2010 06:45

Chrome~,
Цитата:

Не исключено, что все блоки будут одинакового размера. Или же наоборот: сервер будет отправлять блоки разного размера. (по 1024 байт, 2048 и т. д.)
0D 0A - идентификационная последовательность байт, который сведетельствует об окончании передачи. Только не нужно забывать про тайм-аут, а то до конца дней будешь эту связку байт ждать :-D

Цитата:

Не исключено, что все блоки будут одинакового размера
Ну дык, надо организовать буфер, иначе отдельный поток на работу, через winsock, например. Он будет штундировать, пока не нарвётся на тайм-аут, например. Или не получит 0D 0A, или не упрётся носом в content-length. В потоке организовываешь саму работу с сокетом, а в классе реализации сокета уже всякими штуками промышляешь.

Может скинуть самую успешную, на мой взгляд, реализацию этих дел?

Собсно - вот: http://www.ararat.cz/synapse/

Лучше - не видал! И посмотреть в сорцах можно всё, что требуется)

rikko 07.03.2010 07:13

dvion, ну просто кладезь ценной инфы! очень хорошо. спасибо, за ссыль.

_nic 07.03.2010 19:38

Гм а что есть сервера которые игнорируют "Connection : Close" ?


Время: 07:07