Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.10.27;
Скачать: [xml.tar.bz2];

Вниз

О запросах браузера и ответах Web-сервера.   Найти похожие ветки 

 
SergP   (2003-08-16 17:30) [0]

1.Конекчусь браузером через мой прокси. Браузер посылает запрос.
Далее к серверу запрос передается с помощью TClientSocket.
Сервер посылает ответ в виде нескольких пакетов. В первом находится заголовок (ну бывает и немного лишнего кроме заголовка).
Далее существуют такие ситуации, когда браузер по существующему незакрытому соединению посылает следующий запрос.

Вопрос: Второй и последующие запросы браузер посылает после того как были получены все пакеты от предыдущего запроса или может посылать когда еще не все пакеты получены?

2. получаю от сервера первый пакет ответа от сервера:
----------------------------------------
HTTP/1.0 200 OK
Server: Mathopd/1.4b12
Date: Sat, 16 Aug 2003 06:25:13 GMT
Expires: Fri, 14 Nov 2003 06:25:13 GMT
Content-Type: image/jpeg
Content-Length: 8927
Last-Modified: Thu, 15 May 2003 07:30:56 GMT
Age: 24518
X-Cache: HIT from great.kw.ukrtel.net
Proxy-Connection: keep-alive

яШяа
--------------------------------
Определяю размер,дату и время последней модификации. Ищу файл в кеше и сравниваю эти данные. Если данные совпадают, я закрываю соединение. Уменьшается ли при этом трафик. Т.е. после закрытия TClientSocket"а сервер остальные данные передавать не будет или будет передавать пока не передаст полностью несмотря на то что я их уже не собираюсь принимать?


 
nikkie   (2003-08-16 18:07) [1]

имхо тебе надо сначала смотреть свой кеш - и смотреть на поле Expires. если момент Expires еще не прошел - возвращаешь файл из кеша, в противном случае - открывать ClientSocket. разумеется к кешу обращаться только если в запросе от браузера не было параметра no-cache.


 
SergP   (2003-08-16 18:48) [2]

1. А что такое Expires. Что там за дата указана?

2. И как насчет остального: Правильно я думаю или ошибаюсь?


 
nikkie   (2003-08-17 01:56) [3]

1. expire - закончиться, истечь (о сроках)
дата после которой ожидается, что запрошенный документ может измениться.

я только подумал - не уверен, что хороший совет тебе дал. надо поэкспериментировать, что будет сервер возвращать для статических страниц...

2. точно сказать не могу. наверное, зависит от размеров системных буферов на чтение/запись. вероятно если файл не совсем маленький, то трафик будет меньше.


 
SergP   (2003-08-17 10:43) [4]

Вот что сервер выдаетдля статической страницы:

HTTP/1.0 200 OK
Date: Fri, 15 Aug 2003 16:29:41 GMT
Server: CERN httpd 3.0B (VAX VMS)
Last-Modified: Sun, 22 Dec 2002 02:16:39 GMT
ETag: "eed099-46db-3e052087-windows-1251"
Content-Length: 18478
Content-Type: text/html; charset=windows-1251
Age: 137056
X-Cache: HIT from great.kw.ukrtel.net
Proxy-Connection: keep-alive

Здесь нет Expires. Значит я так понял если этот файл есть в кеше, но у него нет expires то нужно проверить обновление...
А все таки как лучше проверить обновление, чтобы после получения заголовка можно было бы принять решение либо о дальнейшей загрузке файла, либо о доставании его из кеша, и соответственно пи этом о закрытии соединения, но чтобы при этом я не получал ничего ненужного от сервера? (преследуется цель максимальной экономии трафика, и в то же время актуальности данных доставаемых из кеша)


 
app   (2003-08-17 11:47) [5]

Last-Modified: Sun, 22 Dec 2002 02:16:39 GMT


 
SergP   (2003-08-17 12:00) [6]


> app © (17.08.03 11:47) [5]
> Last-Modified: Sun, 22 Dec 2002 02:16:39 GMT


Я видно некорректно задал вопрос.
Смысл в том что подаю запрос хосту. Хост мне передает ответ в виде нескольких пакетов. В первом из них заголовок. Так я разбираю заголовок, и если Last-Modified совпадает со значением из кеша, то беру данные из кеша, а соединение обрываю, т.е. не принимаю остальные пакеты. Но после обрыва соединения (Tclientsocket.socket.close) будут ли передаваться остальные пакеты ответа сервера? Или сервер тоже прекратит передачу данных. Если нет, то как это все можно покоректнее сделать (чтобы я не получал ненужных мне данных, которые комп все равно будет игнорировать)? просто мне не нужен всякий мусор в трафике.


 
Polevi   (2003-08-17 20:59) [7]

TCP протокол с гарантированной доставкой, создается виртуальный канал, если одна из сторон оборвет его, отправляющая узнает об этом


 
Anatoly Podgoretsky   (2003-08-17 21:13) [8]

SergP © (17.08.03 12:00) [6]
Нет особого смысла заказывать все, закажи только заголовок


 
SergP   (2003-08-17 21:51) [9]


> Anatoly Podgoretsky © (17.08.03 21:13) [8]
> SergP © (17.08.03 12:00) [6]
> Нет особого смысла заказывать все, закажи только заголовок


Если я закажу заголовок (как я понял нужно поменять метод GET на HEAD), то если окажется что в кеше нет нужного, то мне после этого снова придется заказывать все методом GET (снова лишний трафик).

Но вроде бы Poveli меня убедил.


 
Palladin   (2003-08-17 23:14) [10]


> Polevi © (17.08.03 20:59) [7]

Не скажи... Если бы было так, понятия времени-ожидания (timeout) не вводили бы... всегда может случится физический разрыв... да и много может чего случится...


 
Anatoly Podgoretsky   (2003-08-17 23:18) [11]

Обращаться к внешнему серверу надо тогда, когжа нет поля
Expires: Fri, 14 Nov 2003 06:25:13 GMT или когда дата просрочена и то сначала прочитать заголовок и только потом читать полностью, да некоторая перегрузка есть, но окупается надежностью и простотой.


 
SergP   (2003-08-18 00:22) [12]


> Anatoly Podgoretsky © (17.08.03 23:18) [11]
> Обращаться к внешнему серверу надо тогда, когжа нет поля
>
> Expires: Fri, 14 Nov 2003 06:25:13 GMT или когда дата просрочена
> и то сначала прочитать заголовок и только потом читать полностью,
> да некоторая перегрузка есть, но окупается надежностью и
> простотой.


Ну это ИМХО принцип работы многих кешей... А тут хочется придумать что-то чтобы еще заметнее ускоряло инет...


 
Polevi   (2003-08-18 10:19) [13]

>Palladin © (17.08.03 23:14) [10]
еще метеориты могут упасть..


 
nikkie   (2003-08-18 19:06) [14]

>SergP
включай в запрос If-Modified-Since и будет тебе счастье


 
SergP   (2003-08-18 19:42) [15]


> nikkie © (18.08.03 19:06) [14]
> >SergP
> включай в запрос If-Modified-Since и будет тебе счастье


А это что такое? Плиз объясни...

Кстати еще одна проблема. Когда конектюсь браузером через мой прокси - все нормально работает. Но когда пытался конектится флашгетом получил такую ошибку:
Запрос флашгета:
Memo1

GET http:\\ps-indx.narod.ru\barsar31.zip HTTP/1.1
Host: ps-indx.narod.ru
Accept: */*
User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Pragma: no-cache
Cache-Control: no-cache
Connection: close

Ответ сервера:

HTTP/1.0 400 Bad Request
Server: Squid/2.4.STABLE6
Mime-Version: 1.0
Date: Mon, 18 Aug 2003 15:24:31 GMT
Content-Type: text/html
Content-Length: 868
Expires: Mon, 18 Aug 2003 15:24:31 GMT
X-Squid-Error: ERR_INVALID_URL 0
X-Cache: MISS from great.kw.ukrtel.net
Proxy-Connection: close

<HTML><HEAD>
<TITLE>ERROR: The requested URL could not be retrieved</TITLE>
и так далее.....

Не могу понять что я не то сделал. Почему сервер говорит что неполный запрос (ошибка 400)?
Моя прокся пока конектиться через внешний прокси...

Файл этот существует. Я его сам закидывал туда....


 
SergP   (2003-08-18 19:45) [16]

Блин.
После: "Запрос флашгета" не смотрите на "memo1". Это кусок от лога я забыл удалить. Оно естественно в запрос не включается...


 
SergP   (2003-08-18 19:47) [17]

Или может это народ глючит?


 
nikkie   (2003-08-18 20:23) [18]

в целом алгоритм обработки GET должен выглядеть видимо так:
1. если в запросе присутствует no-cache, то запросить сервер, не смотря на кеш, иначе
2. если запрошенный URL присутствует в кеше и у него Expires больше текущей даты, то вернуть файл из кеша, иначе (если Expires отсутствует или срок истек)
3. запросить сервер с параметром If-Modified-Since. если в ответ получен код 304 - вернуть файл из кеша, иначе вернуть то, что передал сервер.

304 Not Modified

If the client has performed a conditional GET request and access is
allowed, but the document has not been modified since the date and
time specified in the If-Modified-Since field, the server must
respond with this status code and not send an Entity-Body to the
client. Header fields contained in the response should only include
information which is relevant to cache managers or which may have
changed independently of the entity"s Last-Modified date. Examples
of relevant header fields include: Date, Server, and Expires. A
cache should update its cached entity to reflect any new field
values given in the 304 response.

по поводу твоей проблемы: а где запрос, который ты посылаешь на сервер?


 
SergP   (2003-08-18 20:32) [19]

Так вот же он: ( я же его указал).

GET http:\\ps-indx.narod.ru\barsar31.zip HTTP/1.1
Host: ps-indx.narod.ru
Accept: */*
User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Pragma: no-cache
Cache-Control: no-cache
Connection: close

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


 
nikkie   (2003-08-18 20:40) [20]

>Так вот же он: ( я же его указал).
ты указал запрос, который пришел к твоему прокси. откуда же я знаю, что
>запросы от клиентских программ переправляются моим прокси дальше без изменений.
это неправильно. ты должен менять URL, в результате должно быть
GET /barsar31.zip HTTP/1.1


 
SergP   (2003-08-19 15:59) [21]

обнаружилась странная вещь. На моем домашнем компе флашгетом можно закачать файл через мою прогу. А вот на работе не хочет работать нормально. (Все что я привел выше - пробовалось на компе который находится на работе).
Пробовал подключать два таких прокси в цепочку и смотреть как запросы проходят через один прокси на второй. Как оказалось - без изменений... поэтому я ничего не могу понять, в чем же дело?

На обоих компах стоят одинаковые ОС. И среди остального ПО вроде бы нет ничего что могло бы мешать. Единственная разница в том что на работе у меня есть еще локальная сеть. Но разве она может мешать мне?


 
nikkie   (2003-08-19 19:25) [22]

тут я вспомнил, что твоя программа работает не как http-прокси, а просто передает запрос другому прокси. в этом случае модифицировать url, конечно, не надо.

>На обоих компах стоят одинаковые ОС.
дело не в твоем компьютере. разница в тех прокси, через которые ты выходишь.

прокси твой жалуется на неправильный url. вероятно не нравятся бек-слеши. хотя я не понимаю почему тогда напрямую работает.


 
SergP   (2003-08-19 19:51) [23]


> тут я вспомнил, что твоя программа работает не как http-прокси, а просто передает запрос другому прокси. в этом случае модифицировать url, конечно, не надо.


Ну да. Пока именно так. Просто остались глюки от которых я не могу избавиться, в момент отконективания клиента (браузера, и пр.) от прокси. Уже все перепробовал. не получается избавиться от ошибок и все. А самое интерестное что эти ошибки не каждый раз вылазят, а иногда... К тому же некоторые ошибки сокетов не лечатся способом ErrorCode:=0 в onError. А некоторые ошибки Access Violation не лечаться с помощью try ... except ... end;
Чуть позже постараюсь запостить кусок кода, который виноват в возникновении ошибок.

А насчет предыдущей ошибки (400), оказалось что Флашгет когда конектится непосредственно через внешнюю проксю - получает такой нехороший ответ. Хотя дома я конектился флашгетом через мою прогу, которая в свою очередь конектилась через ту же самую внешнюю проксю. И все было нормально. Разве что нашел одно отличие: - флашгеты разных версий на компах. Видимо что-то в запросе у него не то... Хотя это и не заметно на первый взгляд... Хотя это уже не касается Дельфей...


 
xxx   (2003-09-02 10:32) [24]

Браузер посылает запросы не дожидаясь получкния предыдущих


 
SergP   (2003-09-02 16:46) [25]


> xxx (02.09.03 10:32) [24]
> Браузер посылает запросы не дожидаясь получкния предыдущих


Ты хочешь сказать что браузер может послать несколько запросов подряд а уже после того получать от сервера данные...

Хм... А как мне тогда вылавливать заголовки ответа сервера?
Я же думал что заголовок будет в первом ответе сервера после подачи очередного запроса браузером....


 
panov   (2003-09-02 19:23) [26]

Хм... А как мне тогда вылавливать заголовки ответа сервера?
Я же думал что заголовок будет в первом ответе сервера после подачи очередного запроса браузером....


Для каждого запроса создается новый сокет, он и получает ответ.


 
SergP   (2003-09-02 19:48) [27]


> panov © (02.09.03 19:23) [26]
> Хм... А как мне тогда вылавливать заголовки ответа сервера?
> Я же думал что заголовок будет в первом ответе сервера после
> подачи очередного запроса браузером....
>
> Для каждого запроса создается новый сокет, он и получает
> ответ.


В том то и дело что не для каждого. Браузер может делать несколько запросов используя одно соединение (http1.1), т.е. один сокет...
Но я думал что следующий запрос он должен выдавать после того как получит всю информацию которая должна прийти на предыдущий запрос. Пока вроде бы так все и работает, но вот товарищ xxx заставил меня сомневаться в моих предположениях...


 
nikkie   (2003-09-02 20:11) [28]

игнорируй анонимного товарища xxx. пока что нет оснований полагать, что он четко представляет то, о чем пишет...


 
Beginer1   (2003-09-02 23:23) [29]

>SergP

>GET http:\\ps-indx.narod.ru\barsar31.zip HTTP/1.1
>Ответ сервера:
>HTTP/1.0 400 Bad Request
>А насчет предыдущей ошибки (400), оказалось что Флашгет когда конектится непосредственно через внешнюю проксю -

ну так слешеки ставь правильно
GET http://ps-indx.narod.ru/barsar31.zip HTTP/1.1
Ответ сервера:
HTTP/1.0 200 OK


 
SergP   (2003-09-03 05:13) [30]


> Beginer1 © (02.09.03 23:23) [29]


Да с этим я уже разобрался. Вернее понял что у меня флашгет глючный, выдает неправильные запросы когда через прокси конектится (1.4). Потому что оказалось что 0,99 работает нормально...



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.10.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.012 c
4-89658
Maxim Pshevlotsky
2003-08-22 16:29
2003.10.27
ИЗМЕНИТЬ РАЗМЕР ЗНАЧКА!


14-89502
Zhouck
2003-10-09 14:07
2003.10.27
Fast Script


4-89653
YuraR
2003-08-19 15:02
2003.10.27
Как получить хэндл child-окна в котором нажата кнопка?


1-89362
john_ea
2003-10-16 07:03
2003.10.27
TStingGrid


14-89473
Layner
2003-10-07 10:25
2003.10.27
E book compiler полная лажа (html>exe)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский