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

Форум АНТИЧАТ (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


Время: 08:15