![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
О запросах браузера и ответах Web-сервера. [D5, WinME]
SergP © (2003-08-16 17:30:00)
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"а сервер остальные данные передавать не будет или будет передавать пока не передаст полностью несмотря на то что я их уже не собираюсь принимать?
SergP (2003-09-03 05:13:00) [1]
> Beginer1 © (02.09.03 23:23) [29]
Да с этим я уже разобрался. Вернее понял что у меня флашгет глючный, выдает неправильные запросы когда через прокси конектится (1.4). Потому что оказалось что 0,99 работает нормально...
Beginer1 (2003-09-02 23:23:00) [2]
>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.zipHTTP/1.1
Ответ сервера:
HTTP/1.0 200 OK
nikkie (2003-09-02 20:11:00) [3]
игнорируй анонимного товарища xxx. пока что нет оснований полагать, что он четко представляет то, о чем пишет...
SergP (2003-09-02 19:48:00) [4]
> panov © (02.09.03 19:23) [26]
> Хм... А как мне тогда вылавливать заголовки ответа сервера?
> Я же думал что заголовок будет в первом ответе сервера после
> подачи очередного запроса браузером....
>
> Для каждого запроса создается новый сокет, он и получает
> ответ.
В том то и дело что не для каждого. Браузер может делать несколько запросов используя одно соединение (http1.1), т.е. один сокет...
Но я думал что следующий запрос он должен выдавать после того как получит всю информацию которая должна прийти на предыдущий запрос. Пока вроде бы так все и работает, но вот товарищ xxx заставил меня сомневаться в моих предположениях...
panov (2003-09-02 19:23:00) [5]
Хм... А как мне тогда вылавливать заголовки ответа сервера?
Я же думал что заголовок будет в первом ответе сервера после подачи очередного запроса браузером....
Для каждого запроса создается новый сокет, он и получает ответ.
SergP (2003-09-02 16:46:00) [6]
> xxx (02.09.03 10:32) [24]
> Браузер посылает запросы не дожидаясь получкния предыдущих
Ты хочешь сказать что браузер может послать несколько запросов подряд а уже после того получать от сервера данные...
Хм... А как мне тогда вылавливать заголовки ответа сервера?
Я же думал что заголовок будет в первом ответе сервера после подачи очередного запроса браузером....
xxx (2003-09-02 10:32:00) [7]
Браузер посылает запросы не дожидаясь получкния предыдущих
SergP (2003-08-19 19:51:00) [8]
> тут я вспомнил, что твоя программа работает не как http-прокси, а просто передает запрос другому прокси. в этом случае модифицировать url, конечно, не надо.
Ну да. Пока именно так. Просто остались глюки от которых я не могу избавиться, в момент отконективания клиента (браузера, и пр.) от прокси. Уже все перепробовал. не получается избавиться от ошибок и все. А самое интерестное что эти ошибки не каждый раз вылазят, а иногда... К тому же некоторые ошибки сокетов не лечатся способом ErrorCode:=0 в onError. А некоторые ошибки Access Violation не лечаться с помощью try ... except ... end;
Чуть позже постараюсь запостить кусок кода, который виноват в возникновении ошибок.
А насчет предыдущей ошибки (400), оказалось что Флашгет когда конектится непосредственно через внешнюю проксю - получает такой нехороший ответ. Хотя дома я конектился флашгетом через мою прогу, которая в свою очередь конектилась через ту же самую внешнюю проксю. И все было нормально. Разве что нашел одно отличие: - флашгеты разных версий на компах. Видимо что-то в запросе у него не то... Хотя это и не заметно на первый взгляд... Хотя это уже не касается Дельфей...
nikkie (2003-08-19 19:25:00) [9]
тут я вспомнил, что твоя программа работает не как http-прокси, а просто передает запрос другому прокси. в этом случае модифицировать url, конечно, не надо.
>На обоих компах стоят одинаковые ОС.
дело не в твоем компьютере. разница в тех прокси, через которые ты выходишь.
прокси твой жалуется на неправильный url. вероятно не нравятся бек-слеши. хотя я не понимаю почему тогда напрямую работает.
SergP (2003-08-19 15:59:00) [10]
обнаружилась странная вещь. На моем домашнем компе флашгетом можно закачать файл через мою прогу. А вот на работе не хочет работать нормально. (Все что я привел выше - пробовалось на компе который находится на работе).
Пробовал подключать два таких прокси в цепочку и смотреть как запросы проходят через один прокси на второй. Как оказалось - без изменений... поэтому я ничего не могу понять, в чем же дело?
На обоих компах стоят одинаковые ОС. И среди остального ПО вроде бы нет ничего что могло бы мешать. Единственная разница в том что на работе у меня есть еще локальная сеть. Но разве она может мешать мне?
nikkie (2003-08-18 20:40:00) [11]
>Так вот же он: ( я же его указал).
ты указал запрос, который пришел к твоему прокси. откуда же я знаю, что
>запросы от клиентских программ переправляются моим прокси дальше без изменений.
это неправильно. ты должен менять URL, в результате должно быть
GET /barsar31.zip HTTP/1.1
SergP (2003-08-18 20:32:00) [12]
Так вот же он: ( я же его указал).
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:23:00) [13]
в целом алгоритм обработки 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 19:47:00) [14]
Или может это народ глючит?
SergP (2003-08-18 19:45:00) [15]
Блин.
После: "Запрос флашгета" не смотрите на "memo1". Это кусок от лога я забыл удалить. Оно естественно в запрос не включается...
SergP (2003-08-18 19:42:00) [16]
> 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)?
Моя прокся пока конектиться через внешний прокси...
Файл этот существует. Я его сам закидывал туда....
nikkie (2003-08-18 19:06:00) [17]
>SergP
включай в запрос If-Modified-Since и будет тебе счастье
Polevi (2003-08-18 10:19:00) [18]
>Palladin © (17.08.03 23:14) [10]
еще метеориты могут упасть..
SergP (2003-08-18 00:22:00) [19]
> Anatoly Podgoretsky © (17.08.03 23:18) [11]
> Обращаться к внешнему серверу надо тогда, когжа нет поля
>
> Expires: Fri, 14 Nov 2003 06:25:13 GMT или когда дата просрочена
> и то сначала прочитать заголовок и только потом читать полностью,
> да некоторая перегрузка есть, но окупается надежностью и
> простотой.
Ну это ИМХО принцип работы многих кешей... А тут хочется придумать что-то чтобы еще заметнее ускоряло инет...
Anatoly Podgoretsky (2003-08-17 23:18:00) [20]
Обращаться к внешнему серверу надо тогда, когжа нет поля
Expires: Fri, 14 Nov 2003 06:25:13 GMT или когда дата просрочена и то сначала прочитать заголовок и только потом читать полностью, да некоторая перегрузка есть, но окупается надежностью и простотой.