| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Загрузка данных от сервера (HTTP/HTML) |
| Автор: Phantomas 22.4.2010, 21:09 |
| Здравствуйте, речь идет про отправку GET запроса на HTTP сервер и последующего приема данных от него (код страницы). Интересует как работают браузеры когда принимают страницу, не смотря на то, что они не знают ее вес, они скачивают ее полностью. Размер данных написан в заголовке ответа "Content-Length", неужели для начала выделяется предположительный размер памяти для заголовка, а после его приема идет увеличение памяти и докачивание в нее самих данных? А что если "Content-Length" не будет указан? Так же интересует каким образом отделяется заголовок от кода страницы? По первым двум подряд идущим CRLF? Благодарю заранее... |
| Автор: maxim1000 22.4.2010, 21:53 |
| есть такой вариант: выделяем какой-то стартовый кусок памяти, а потом постепенно больше и больше когда выделяем больший кусок, в его начало копируем то, что есть на данный момент но если на каждый байт делать перевыделение, будет слишком долго поэтому каждый раз выделяется в два раза больше чем раньше копирований и перевыделений становится гораздо меньше нечто похожее реализовано, например, в std::vector |
| Автор: Phantomas 23.4.2010, 10:40 |
| Благодарю за ответы, вот уж не знал что все так произвольно. В основном интересует сколько именно выделять памяти? Хочу в обрез, а тут такое дело что сервер перед "Content-Length" может послать еще множество строк ("Content-Range", "Content-Type" или даже дату). Может на W3 (www.w3.org) или в каком-либо другом официальном документе указан лимит на заголовок от сервера? Слава богу работаю только с одним сервером, который указывает "Content-Length". |
| Автор: SickFxck 23.4.2010, 20:09 |
| Под заголовок тебе нужно памяти в пределах разумного (один килобайт достаточно более чем). Если заголовок больше (перевода строки всё никак нет), то можно тупо проигнорить оставшуюся часть заголовка. После получания заголовка анализирешь его и сохраняешь какое-то значение, если требуется. |
| Автор: qpAHToMAS 13.11.2010, 08:09 |
| Продолжая тему про общение с WEB сервером: Благодаря сообщениям выше начал набрасывать код по приему chunk'ов. Появился вопрос: ЯП требует указать количество байт для приема от сервера (на один chunk/пакет), т.е. то число, сколько программе скачивать байт и записывать в память (buffer). Хочется принять все так, как отправляет сервер, т.е. максимум. Опытным путем удалось определить предельное число байт: 2096. Если попытаться принять больше — возникает критическая ошибка. Теперь вопрос: Откуда берется это число (2096)? Это MTU или какая-нибудь отдельная опция на сервере/клиенте? Все беспокойство связано с работой программы на разных видах подключения/серверах/ос и т.д. |