![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос про принцип работы HTTP
Суслик © (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. если есть -- повезло. если нет -- тупо читаешь, пока сокет не закроют.
на самом деле всё сложнее, но пока и так пойдёт. %-)