Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос про принцип работы HTTP


Страницы:   1 2 3

Суслик ©   (2006-11-11 01:11:00) 

Здравствуйте!

1. Вводная.
Принимая на *стороне сервера* запрос TCP нужно быть готовым, что он прийдет не весь сразу, а частями. Это факт. Когда когда-то я писал свои тестовые сервера (в целях изучения) я применял следующий протокол:
а) мой сервер ждал 4 байта - длина сообщения.
б) после получения четырех байт - сервер читал сообщения, с учетом того, что сообщение может прийти не сразу.

2. Вопрос.
Сейчас я начал разбираться с HTTP.
Это вроде текстовый протокол. Делаю я это так - с помощью TIdTCPServer ловлю все, что мне посылает браузер.
Насколько я понял, HTTP - это чисто протокол. Я не смог заметить, что каким-то образом передается длина сообщения.

Вопрос
Как сервер HTTP понимает сколько же ему читать из сокета?

PS. Прошу прощения за ламерский вопрос :)


Ketmar   (2006-11-11 02:52:00) [21]

>[23] Суслик(c) 11-Nov-2006, 02:37
>sources of your server wellcome to my email
почистить надо сначала. а то там не то что ты, я уже ничего не понимаю. потому и утром. %-)


Суслик   (2006-11-11 02:37:00) [22]

sources of your server wellcome to my email

:)


Ketmar   (2006-11-11 02:33:00) [23]

до сих пор полные rfc ниасилил. что не мешает моему серверу отлично работать в нашей локалке. %-)


Суслик   (2006-11-11 02:16:00) [24]

Всем спасибо.
Покопаюсь в сервера Кетмара (который он мне уже прислал завтра).
Если появятся вопросы обязательно спрошу.

--------
Ко всем, кто советовал читать rfc.
Я переодически читаю сабж. Но сами понимаете, что дело это очень непростое, т.к. документы носят характер сугубо технический.

Согласитесь, что иногда нужно быстро понять суть, а уж потом копать детали. Данный топик был организован мною для того, чтобы быстро выяснить суть. Поэтому к rfc я обязательно обращусь, но нужно прежде понимать что к чему, хотя бы в общих чертах.


Eraser   (2006-11-11 02:11:00) [25]

> [18] Суслик ©   (11.11.06 02:10)

вроде так, а там кто его знает какие случаи могут быть ) уж очень пристроек всяких много у этого http.


Суслик   (2006-11-11 02:11:00) [26]


> Ketmar ©   (11.11.06 02:08) [16]
> >[14] Суслик(c) 11-Nov-2006, 02:00
> >Дай. Разберусь.
> ок. утречком пришлю (найти надо %-).

пришли. буду рад.


Суслик   (2006-11-11 02:10:00) [27]


> Eraser ©   (11.11.06 02:04) [15]

наверное, начинаю понимать - если встретился признак окончания заголовка запроса, но content-length в заголовке не встретился, то типа все - весь запрос.

Так?


Ketmar   (2006-11-11 02:09:00) [28]

>[15] Eraser(c) 11-Nov-2006, 02:04
>признак окончания заголовка запроса.
или ответа. %-)


Ketmar   (2006-11-11 02:08:00) [29]

>[14] Суслик(c) 11-Nov-2006, 02:00
>Дай. Разберусь.
ок. утречком пришлю (найти надо %-).

>Т.е. - пустая строка - это признак окончания запроса?
нет. окончания заголовков.


Eraser   (2006-11-11 02:04:00) [30]

> Т.е. - пустая строка - это признак окончания запроса?

признак окончания заголовка запроса.


Суслик   (2006-11-11 02:00:00) [31]


> Ketmar ©   (11.11.06 01:58) [12]
> тебе что, дать самописный минимальный http-сервер на api?
>  там кода мизер. %-)


Дай. Разберусь.
timokhov@gmail.com (только БЕЗ exe - зарежет, собака).

-----
Т.е. - пустая строка - это признак окончания запроса?


Eraser   (2006-11-11 01:59:00) [32]

> [11] Суслик ©   (11.11.06 01:56)


> А как серверу узнать, что это "все"

а ему и не надо узнавать, сервак должен "рубить" соединение.


Ketmar   (2006-11-11 01:58:00) [33]

>[11] Суслик(c) 11-Nov-2006, 01:56
>А как серверу узнать, что это "все". Ведь может еще пакет
>прийти.
какой, в пень, пакет??? заголовки заканчиваются пустой строкой. как поймал ей -- все. если есть content-length, то читаешь сколько надо. если нет -- сразу запрошеное отдаешь. просто, как выпить 100 граммов.

>Хоть режь меня - не могу понять, какая тут логика.
тебе что, дать самописный минимальный http-сервер на api? там кода мизер. %-)


Суслик   (2006-11-11 01:56:00) [34]


> Ketmar ©   (11.11.06 01:55) [10]
> значит, это всё. больше читать ничего не надо. надо только
> отдавать.

Америку открыл :)

А как серверу узнать, что это "все". Ведь может еще пакет прийти.

Хоть режь меня - не могу понять, какая тут логика.


Ketmar   (2006-11-11 01:55:00) [35]

значит, это всё. больше читать ничего не надо. надо только отдавать.


Суслик   (2006-11-11 01:52:00) [36]


> если клиент не удосужился прислать content-length, читать
> вообще ничего не надо. такие клиенты должны умереть быстро
> и болезненно.

Ну типа, сами себя об стену :)
А все-так.  IE (6) прислал моему INDY серверу это. Тут нет, упомянутого тобой content-lentgth.

GET /123 HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockw ave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: ru
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET C
LR 1.1.4322)
Host: 127.0.0.1:1234
Connection: Keep-Alive


Ketmar   (2006-11-11 01:48:00) [37]

>[6] Суслик(c) 11-Nov-2006, 01:40
>что значит закроют?
а. пардон. попутал с недосыпу клиент с сервером. %-)
если клиент не удосужился прислать content-length, читать вообще ничего не надо. такие клиенты должны умереть быстро и болезненно.


Суслик   (2006-11-11 01:45:00) [38]


> Eraser ©   (11.11.06 01:26) [2]

Я полагаю, что на *мой* вопрос больше отвечает этот раздел http://www.lib.ru/WEBMASTER/rfc2068/section-5.html.

Вопрос тогда такой - а сколько сервер может ждать пока не поймет, что не стоит ждать и дочитывать все данные (например, потому, что клиент "отвалился" или еще почему)?


Суслик   (2006-11-11 01:40:00) [39]


> Ketmar ©   (11.11.06 01:38) [5]

Я примерно в этом духе что-то и представлял - т.е. некие косвенные правла чтения.

Но вот этого я понять все равно не могу

> тупо читаешь, пока сокет не закроют.

что значит закроют?
Исходный вопрос был - как сервер определяет скильки ему читать?
Если соекет закроют, то куда он (сервер) отвечать то будет?


Ketmar   (2006-11-11 01:38:00) [40]

сначала читаешь заголовки. потом ищешь там content-length. если есть -- повезло. если нет -- тупо читаешь, пока сокет не закроют.

на самом деле всё сложнее, но пока и так пойдёт. %-)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо